G1 的 Region、停顿目标和记忆集分别是什么、有多大影响?这篇用 -Xlog:gc 与 gc+phases=debug 的真实日志逐项量出来(晋升规则见上一篇,Humongous 对象与 G1 记忆集的专门篇目在后面)。
-Xmx64m → Region 大小 1M -Xmx512m → Region 大小 1M -Xmx2g → Region 大小 1M -Xmx8g → Region 大小 4M -Xmx32g → Region 大小 16M
目标 年轻代 GC 次数 停顿中位数(ms) 最大(ms) 平均 Eden 大小(MB)
5 ms 1692 1.14 3.39 22.2
50 ms 711 1.59 9.28 51.7
200 ms 725 1.54 9.02 52.0 整个 6 秒里各类停顿的次数:
Young 230 次
Young(并发标记开始) 241 次
Remark 241 次
Cleanup 241 次
Young(准备 Mixed) 241 次
Mixed 243 次
从一次「并发标记开始」到下一次之间的停顿序列(一个完整周期):
Young(并发标记开始) → Remark → Young → Cleanup → Young(准备 Mixed) → Mixed → Young×57
日志里的并发阶段: ['Mark Cycle'][老年代有大量指向新对象的引用] 年轻代 GC 118 次,停顿中位 5.59 ms;平均每次:Merge Heap Roots 0.09 ms、Scan Heap Roots 2.04 ms、Object Copy 3.02 ms,待处理的脏卡片 23938 张 [没有这种引用] 年轻代 GC 284 次,停顿中位 0.65 ms;平均每次:Merge Heap Roots 0.03 ms、Scan Heap Roots 0.00 ms、Object Copy 0.00 ms,待处理的脏卡片 11 张