G1收集器的出现除了提供可控的低延迟GC,解决历史收集器的一些弊病,同时还尽力简化调优参数
对于大多数应用,开启收集器,再配置一下Xms和Xmx就足够了(不建议配置Xmn)
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:G1HeapRegionSize=n
年轻代堆大小的最小值
设置年轻代堆大小占整个堆的百分比。
默认值是Java堆的5% (experimental VM flag)
年轻代堆大小的最大值
设置年轻代堆大小占整个堆的百分比。
默认值是Java堆的60%。(experimental VM flag)
-XX:G1NewSizePercent=5
-XX:G1MaxNewSizePercent=60
-XX:InitiatingHeapOccupancyPercent=45
-XX:G1MixedGCLiveThresholdPercent=85
-XX:G1HeapWastePercent=10
-XX:G1OldCSetRegionThresholdPercent=10
-XX:G1ReservePercent=10
-XX:G1MixedGCCountTarget=8
使用默认配置参数,(MaxGCPauseMillis=200)多个服务GC收集器从CMS转到G1效果都很好,GC耗时每分钟 大都在40ms以内,但是有个服务就与众不同了。
-XX:+UnlockExperimentalVMOptions
-XX:G1NewSizePercent=25
-XX:G1MaxNewSizePercent=40
提前触发标记周期 45%–>35%
mixedGC扫描的老年代的占用率阈值,占用率高的不再扫描 85%–>65% (experimentalVMOptions)
mixedGC中要收集的老年代区域占整个堆的百分比上限 10%–>20%
混合垃圾收集的目标数量,多分几次执行 8–>12
-XX:InitiatingHeapOccupancyPercent=35
-XX:+UnlockExperimentalVMOptions -XX:G1MixedGCLiveThresholdPercent=65
-XX:G1OldCSetRegionThresholdPercent=20
-XX:G1MixedGCCountTarget=12
-XX:G1HeapWastePercent=5
-XX:G1ReservePercent=20
-XX:G1HeapRegionSize=8
java -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version|grep 'experimental' |grep G1
jinfo -flag MaxGCPauseMillis pid
jstat -gc pid
jinfo -flags pid
GC pause (GCLocker Initiated GC) (young)
这个是一个由GCLocker发起的年轻代垃圾收集事件。GCLocker是Java的一个特性,它可以在某些情况下阻止垃圾收集器运行,以避免对应用程序产生负面影响。当GCLocker释放时,它可能会触发一次垃圾收集。
使用JNI临界区的方式操作数组或者字符串时,为了防止GC过程中jarray或者jstring发生位移,而导致数组指针失效,需要保持它们在JVM Heap中的地址在JNI Critical过程中保持不变。于是JVM实现了GC_locker,用于JNI Critical内阻止其他GC的发生。
GC pause (G1 Evacuation Pause) (young)
年轻代已满,执行 YoungGC。
其中"Evacuation"表示在垃圾收集期间,存活的对象被从一个区域移动到另一个区域。
GC pause (G1 Humongous Allocation) (young) (initial-mark)
在年轻代发现了一个"Humongous"对象(即大于G1中region大小50%的对象),触发YoungGC,当前正在进行初始标记阶段。在这个阶段,垃圾收集器会标记出所有的根对象和年轻代中的存活对象。
GC pause (G1 Humongous Allocation) (young) (to-space exhausted)
年轻代发现了一个"Humongous"对象,并且用于存储新对象的"To Space"已经耗尽。执行YoungGC来释放空间。
GC pause (G1 Evacuation Pause) (mixed)
老年代空间占整个堆空间比例达到阈值(默认45%),执行 MixedGC。
Full GC (Allocation Failure)
堆内存空间不足以分配新的对象,触发Full GC。