如何利用 JVM 老年代担保机制(Handle Promotion)避免年轻代回收后崩溃?
- 内容介绍
- 相关推荐
本文共计721个文字,预计阅读时间需要3分钟。
不是+GC+没执行完,而是+GC+执行前+JVM+就发现:
怎么看老年代是否满足担保条件
JVM 在每次 Minor GC 前会做两层判断,关键看日志里的这两项:
-
Desired survivor size和实际晋升对象大小(可通过-XX:+PrintGCDetails观察 Survivor 使用率) - 老年代的
available contiguous space(不是总空闲,是最大一块连续空闲区),这个值不会直接打印,但可通过 GC 日志中老年代已用/总大小反推,再结合ConcurrentMarkSweepGeneration或G1OldGen的碎片化程度估算
真正决定能否“冒险担保”的,是历史晋升均值是否 ≤ 当前老年代最大连续空闲空间。这个均值由 JVM 自动维护,不对外暴露,但可通过多次 Minor GC 后老年代增长量粗略估算。
本文共计721个文字,预计阅读时间需要3分钟。
不是+GC+没执行完,而是+GC+执行前+JVM+就发现:
怎么看老年代是否满足担保条件
JVM 在每次 Minor GC 前会做两层判断,关键看日志里的这两项:
-
Desired survivor size和实际晋升对象大小(可通过-XX:+PrintGCDetails观察 Survivor 使用率) - 老年代的
available contiguous space(不是总空闲,是最大一块连续空闲区),这个值不会直接打印,但可通过 GC 日志中老年代已用/总大小反推,再结合ConcurrentMarkSweepGeneration或G1OldGen的碎片化程度估算
真正决定能否“冒险担保”的,是历史晋升均值是否 ≤ 当前老年代最大连续空闲空间。这个均值由 JVM 自动维护,不对外暴露,但可通过多次 Minor GC 后老年代增长量粗略估算。

