我正在使用Java 7的JAVA GC参数。
-Xmx12g -Xms12g
-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:InitiatingHeapOccupancyPercent=15 -XX:ConcGCThreads=8 -XX:ParallelGCThreads=16 -XX:G1ConcRefinementThreads=17 -XX:+UseCompressedOops -XX:G1ReservePercent=20 -XX:+ParallelRefProcEnabled -XX:+ExplicitGCInvokesConcurrent
我想知道应该在什么%的堆利用率下看到GC被触发。
-XX:G1ReservePercent=20
:保留20%。
-XX:InitiatingHeapOccupancyPercent=15
:由于这个原因,我认为当我的堆使用65%(总计100% - 15 = 85但保留20%,因此65%)时,GC将被触发。
我的理解是否正确?
答案 0 :(得分:0)
在解决JDK-8151176之前,IHOP计算有点特殊。它与相对于总堆的实时集大小进行比较,但实时集大小通常不会与总堆一样大,因为在测量占用率时,年轻区域中的eden和from-space将始终为空。
G1ReservePercent
不计入IHOP,相反,你需要在设置后者时考虑前者。
总计100% - 15 = 85
那是倒退。这是关于占用,而不是免费空间。它名就在那里。
答案 1 :(得分:0)
从参数定义-XX:InitiatingHeapOccupancyPercent = 85, 这意味着标记周期将从总堆的85%开始(此处没有其他参数用-XX标记:InitiatingHeapOccupancyPercent)