美文网首页
JVM 参数

JVM 参数

作者: 风吟空城 | 来源:发表于2019-03-10 17:43 被阅读0次

java 堆

java 运行时内存最为重要的部分,几乎所有的对象和数组都是在堆中分配空间的。

java 堆分为新生代和老年代两个部分,新生代用于存放刚刚产生的对象和年轻的对象,如果对象一直没有被回收,生存的足够长,对象就会被移入老年代。

堆分配参数图

java虚拟机堆.png

新生代

新生代可以细分为:eden、survivor space0(别称s0、from space)和survivor space1(别称s1、to space)。
eden翻译后为伊甸园,是对象的出生地,大部分对象刚刚建立时,通常会存放在这里。
s0、s1翻译后为幸存者,即存放在其中的对象至少经历了一次垃圾回收,并得以幸存。如果在幸存区的对象到了指定的年龄仍未被回收,则有机会进入老年代(tenured)。

相关参数

参数名称 说明 默认值 备注
-Xms 初始堆大小,也可称最小堆大小 物理内存的1/64 默认空余堆内存小于40%时,JVM就会增大堆,直到-Xmx的最大限制
-Xmx 最大堆大小 物理内存的1/4 默认空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制
-Xss 每个线程的堆栈大小 JDK5.0以后每个线程大小为1M,以前每个线程堆栈大小为256K。根据应用的线程所需内存大小调整。在相同物理内存大小下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。一般小的应用,如果栈不是很深,应该是128K够用的,大的应用建议使用256K。这个选项对性能影响比较大,需要严格的测试
-Xmn 堆中新生代的大小

其他相关参数

参数名称 说明 默认值 备注
-XX:AggressiveOpts 加快编译
-XX:PermSize 设置持久代(perm gen)初始值
-XX:MaxPermSize 设置持久代最大值
-XX:DisableExplicitGC 关闭System.gc() 这个参数需要严格的测试
-XX:MaxTenuringThreshold 垃圾最大年龄 如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代的存活时间,增加在年轻代即被回收的概率,该参数只有在串行GC时才有效
-XX:+UseConcMarkSweepGC 使用CMS内存收集 测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置
-XX:+UseParNewGC 设置年轻代为并行收集 可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值
-XX:+UseBiasedLocking 锁机制的性能改善
-XX:+CMSParallelRemarkEnabled 降低标记停顿
-XX:+UseCMSCompactAtFullCollection 在FULL GC的时候, 对年老代的压缩
-XX:+UseFastAccessorMethods 原始类型的快速优化
-XX:+UseCMSInitiatingOccupancyOnly 使用手动定义初始化定义开始CMS收集 禁止hostspot自行触发CMS GC

相关文章

网友评论

      本文标题:JVM 参数

      本文链接:https://www.haomeiwen.com/subject/qwollqtx.html