堆空间的常用参数

-XX:printFlagsInitial:查看所有的参数默认初始值
-XX:printFlagsFinal:查看所有参数的最终值(可能会存在修改的值,这里打印的是最终值)
-xms:堆空间的初始值大小,默认为内存的1/64
-xmx:对空间的最大大小,为内存的1/4
-xmn:设置新生代的大小
-XX:NewRatio:设置新生代和老年代的占比,默认为1:2,也就是值为2
-XX:SurvivorRatio:设置新生代Eden和s0/s1的占比,默认为是8:1:1,也就是值为8
-XX:MaxTenuringThreshold: 设置新生代垃圾的最大年龄数
-XX:+PrintGCDetails: 打印详细的gc处理日志
-XX:HandlePromotionFailure: 是否设置空间分配担保

SurvivorRatio参数设置注意点

如果eden设置得太大,s0/s1区太小,则会出现对象都无法放入s0/s1进行年龄计算,而直接进入老年代,直接使得内存分代的意义大大减弱
如果eden设置得太小,由于新生代中的gc都是由eden满时触发的,所以会导致eden容易满而出现频繁gc的情况,影响到了用户进程。

是否设置空间分配担保参数设置的解释

这个参数在jdk1.7后就失效了,因为默认是true。
在进行minor gc的时候,jvm会检查老年代最大可用的连续空间是否大于新生代所有对象的总空间,

  • 如果大于,则正常进行minor gc

  • 如果小于,jvm会查看HandlePromotionFailure的值,

    如果为true,就会继续检查历次新生代对象晋升到老年代对象的平均大小是否大于老年代最大可用连续空间,如果大于则进行full gc,如果小于则尝试进行minor gc
    如果为false:则直接进行full gc,主要是因为full gc花得时间比较长,尽量不采用full gc。
    

猜你喜欢

转载自blog.csdn.net/lyd135364/article/details/121064682