JVM 各个参数详解

news2024/11/27 21:54:23

ee147c426667484a8d0371640c2135c3.gif在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。

 

 

          PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Instance。GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。

 

 

 

Java Heap分为3个区:1.Young,2.Old,3.Permanent

 

Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象,本文不讨论该区。

 

JVM的Heap分配可以使用-X参数设定,-Xms:初始Heap大小,-Xmx:java heap最大值,-Xmn:young generation的heap大小。

 

 

 

JVM有2个GC线程:第一个线程负责回收Heap的Young区,第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区。

 

Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。

 

 

 

为什么一些程序频繁发生GC?

 

有如下原因:

 

1.程序内调用了System.gc()或Runtime.gc()。

 

2.一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC。

 

3.Java的Heap太小,一般默认的Heap值都很小。

 

4.频繁实例化对象,Release对象 此时尽量保存并重用对象,例如使用StringBuffer()和String()。

 

如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态,许多Server端的Java程序每次GC后最好能有65%的剩余空间

 

经验之谈:

 

1.Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3。

 

2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成。

 

注意:

 

1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作。

 

2.Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。

 

Stack的设定

 

每个线程都有他自己的Stack。

 

-Xss :每个线程的Stack大小,Stack的大小限制着线程的数量。如果Stack过大就好导致内存溢漏。-Xss参数决定Stack大小,例如-Xss1024K。如果Stack太小,也会导致Stack溢漏。

 

硬件环境

 

硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量。

 

如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC。这种情况你可以增加机器的内存,来减少Swap空间的使用。

 

4种GC

 

1、第一种为单线程GC,也是默认的GC,该GC适用于单CPU机器。

 

2、第二种为Throughput GC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UseParallelGC参数启动该GC。

 

3、第三种为Concurrent Low Pause GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。

 

4、第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时,回收一部分Old区对象。-Xincgc参数启动该GC。

 

单文件的JVM内存进行设置

 

默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。

 

设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置。

 

java -Xms64m -Xmx256m Test

 

-Xms是设置内存初始化的大小

 

-Xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)

 

tomcat启动jvm内存设置

 

Linux:

 

在/usr/local/apache-tomcat-5.5.23/bin目录下的catalina.sh添加:JAVA_OPTS='-Xms512m -Xmx1024m'要加“m”说明是MB,否则就是KB了,在启动tomcat时会报内存不足。

 

-Xms:初始值

 

-Xmx:最大值

 

-Xmn:最小值Windows

 

在catalina.bat最前面加入

 

set JAVA_OPTS=-Xms128m -Xmx350m 如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就OOM了..windows服务执行的是bin/tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.解决办法:

 

修改注册表HKEY_LOCAL_MACHINE/SOFTWARE/Apache Software Foundation/Tomcat Service Manager/Tomcat5/Parameters/JavaOptions

 

原值为

 

-Dcatalina.home="C:/ApacheGroup/Tomcat 5.0"

 

-Djava.endorsed.dirs="C:/ApacheGroup/Tomcat 5.0/common/endorsed"

 

-Xrs加入 -Xms300m -Xmx350m

 

重起tomcat服务,设置生效

 

weblogic启动jvm内存设置

 

在weblogic中,可以在startweblogic.cmd中对每个domain虚拟内存的大小进行设置,默认的设置是在commEnv.cmd里面。

 

JBoss

 

默认可以使用的内存为64MB 

 

$JBOSSDIR$/bin/run.config 

 

JAVA_OPTS = "-server -Xms128 -Xmx512"

 

Eclipse

 

在所在目录下,键入 

 

eclipse.exe -vmargs -Xms256m -Xmx512m 

 

256m表示JVM堆内存最小值 

 

512m表示JVM堆内存最大

 

Websphere

 

进入控制台去设置:应用程序服务器 > server1 > 进程定义 > Java 虚拟机

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1175251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ActiveMq学习⑤__ActiveMq的Broker

ActiveMq的Broker 是什么? 相当于一个ActiveMq的服务器实例 Broker其实就是实现了用代码的形式启动ActiveMQ将MQ嵌入到Java 代码中,以便随时用随时启动,在用的时候再去启动这样节省了资源,也保证了可靠性。 按照不同的配置文件…

线程的创建、等待、退出

多线程开发在Linux平台上已经有成熟的pthread库支持,所以使用pthread库在编译时要加上-pthread。其设计的多线程开发的基本概念主要包含3点:线程、互斥锁、条件。其中线程操作又分线程的创建、退出、等待三种。互斥锁包含4种操作,分别是创建、…

线程同步——互斥量解锁、解锁

类似与进程间通信信号量的加锁解锁。 对互斥量进行加锁后,任何其他试图在此对互斥量加锁的线程都会被阻塞,直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程被阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变…

《算计》

第一章:机器的诞生 在一个科技高度发达的未来世界,人类社会已经进入了自主机器时代。人们创造出了一种名为“超级自主机器(Super Autonomous Machine,简称SAM)”的全新型机器,它拥有无限的智慧和学习能力&a…

LeetCode.6 N字形变换

一开始想的是真的创建一个数组 去按照题目所给的要求填入数据 最后输出不为空的数组项 但是不仅时间复杂度高 而且错误频繁出现 最终也没有提交成功 查阅题解后发现数组并不重要 假设我们忽略掉数组中的那些空白项 最终输出的结果就是numRows行的字符串的拼接 string conver…

基于Matlab的yolo算法行人检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 # 基于Matlab编写的Yolo算法行人检测系统介绍 基于Matlab编写的Yolo算法行人检测系统是一种用于自动检测图像或视频…

SAP中接口与集成

从进化的角度看SAP中接口和集成的十个概念 - 知乎 SAP比较常用的几个接口方式及比较-SAP技术站 1. 文件接口 基于文件交换的接口是从SAP向第三方系统提供数据的最古老的技术之一。将文本或excel文件推送到特定目录或从应用程序服务器中提取;两种方式都有效。在没有…

[云原生2. ] Kubernetes的简单介绍

文章目录 1. Kubernetes 概述1.1 简介1.2 作用1.3 Kubernetes 的特点1.4 Kubernetes 主要功能 2. Kubernetes 集群架构与组件2.1 Master 组件2.1.1 Kube-apiserver2.1.2 Kube-controller-manager2.1.3 Kube-scheduler 2.2 配置存储中心2.2.1 etcd 2.3. Node 组件2.3.1 Kubelet2…

51单片机-定时计数器

文章目录 前言1 原理2.编程 前言 1 原理 2.编程 定时计算: 50ms501000us 一个机器周期:1.085us 65535 - 501000/1.08546082 故 40082*1.08549998.97 /*定时器1,定时模式 工作模式1 16位计数器, 定时20秒后使能蜂鸣器*/ #include…

MP4视频文件损坏怎么修复?

3-2 作为摄影师,或者在平时有拍摄工作的事情的,比如搞婚庆、搞航拍什么的,有一定的概率会遇到损坏的视频文件,比如相机突然断电、无人机炸机等,有可能会导致保存的MP4文件损坏。 这种文件使用播放器播放的话&#xf…

2023数学建模国赛C题赛后总结

今天国赛的成绩终于出来了,盼星星盼月亮的。之前面试的时候已经把我给推到国奖评委那里去了,可是好可惜,最终以很微小的劣势错失国二。只拿到了广西区的省一。我心里还是很遗憾的,我真的为此准备了很久,虽然当中也有着…

海康Visionmaster-全局脚本:通信设备 ID 获取方法

全局脚本中通信数据接收函数中的 DeviceID 是按照设备管理列表中至上而下、从 0 开始依此增 1,现在这种方法行不通. 每次增加设备列表都会分配唯一的 ID 号,后续全局脚本中判断设备 ID 通过这个唯一 ID 识别,不再从上到下默认排序。

Docker数据管理、网络与Cgroup资源限制

目录 一、Docker的数据管理 1、数据卷 2、数据卷容器 3、端口映射 4、容器互联 二、Docker网络 2.1Docker网络实现原理 2.2Docker 的网络模式 3.3网络模式详解: host模式 container模式 none模式 bridge模式 自定义网络 创建自定义网络 三、Cgroup资源…

【Mybatis小白从0到90%精讲】12:Mybatis删除 delete, 推荐使用主键删除!

文章目录 前言XML映射文件方式推荐使用主键删除注解方式工具类前言 在实际开发中,我们经常需要删除数据库中的数据,MyBatis可以使用XML映射文件或注解来编写删除(delete)语句,下面是两种方法的示例。 XML映射文件方式 Mapper: int delete(int id);Mapper.xml:

基于SSM的社区智慧养老监护管理平台

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

私有化部署大模型:5个.Net开源项目

从零构建.Net前后端分离项目 今天一起盘点下,10月份推荐的5个.Net开源项目(点击标题查看详情)。 1、BootstrapBlazor企业级组件库:前端开发的革新之路 BootstrapBlazor是一个用于构建现代Web应用程序的开源框架,它基…

C++笔记之表驱动法

C笔记之表驱动法 code review! 文章目录 C笔记之表驱动法0.数组小技巧1.std::map实现2.结构体实现3.数组和结构体结合实现表驱动法-存储函数指针4.表驱动法概念-ChatGPT5. 直接访问表(Direct Access Table)的示例6. 索引访问表(Indexed Acc…

什么情况造成互斥锁死锁

由于互斥锁的使用不当,导致多个线程无法进行下一步的代码运行,也就是说竞争锁的两个线程互相锁住,导致整个进程无法往下运行。 举个例子: 两个锁,两个线程,两个线程运行的条件都是需要同时获得这两把锁&a…

Canvas 梦幻树生长动画

canvas可以制作出非常炫酷的动画&#xff0c;以下是一个梦幻树的示例。 效果图 源代码 <!DOCTYPE> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <title>梦幻数生长动画</title&…

Python基础入门例程49-NP49 字符列表的长度

最近的博文&#xff1a; Python基础入门例程48-NP48 验证登录名与密码&#xff08;条件语句&#xff09;-CSDN博客 Python基础入门例程47-NP47 牛牛的绩点&#xff08;条件语句&#xff09;-CSDN博客 Python基础入门例程46-NP46 菜品的价格&#xff08;条件语句&#xff09;…