什么是GC_HeapInspection以及什么会触发它?

4
我正在查看Java Flight Recorder中的事件转储,并且我看到了一个VM操作GC_HeapInspection,耗时6秒。
这发生在其他监视报告类似延迟的点上。
有趣的是,详细的gc日志没有报告任何超过160毫秒的GC。
我计划进行另一项测试,以查看延迟是否是由于执行安全点所需的时间引起的。
-XX:+PrintGCApplicationStoppedTime -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1

然而,对于这个问题,我想知道什么是 GC_HeapInspection,以及什么会触发它?

1个回答

1
如果我没有理解错误,GC_HeapInspection 是指 JVM 在查找可以进行垃圾回收的对象时浏览堆内存的过程。这意味着它会扫描所有内存,然后检查每个对象的引用。它(可能)在 GC 本身或 STW 事件之前触发。
由于这只是检查过程,所以它(可能)不会被记录为 GC。只要你没有使用串行 GC 或并行 GC,它就不应该停止你的应用程序。(只会在某种程度上减慢它的速度。除非有 STW 事件,这肯定比其他所有 GC 更短。)

*注意:这不是来自任何文档,我只是假设HeapInspection表示正在检查堆栈,然后从那里开始工作。


那很有用的推断。我想找出是否有一个列表(也许是 JDK 源代码)列出了所有的 Stop The World 事件,并找出哪些标记为使用此类型。 - opticyclic
看一下这里的代码(https://hg.openjdk.java.net/aarch32-port/jdk9/hotspot/rev/69689078dff8#l108.15),似乎只有在进行完整GC时才会触发。根据这个Stack Overflow问题(https://dev59.com/KmAf5IYBdhLWcg3wVxcp),当区域大小发生变化时,就会触发完整GC。 - solonovamax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接