Java 什么是GC_HeapInspection?什么可以触发它?

Java 什么是GC_HeapInspection?什么可以触发它?,java,Java,我正在查看Java Flight Recorder转储中的事件,我看到一个VM操作GC\u HeapInspection,耗时6秒 这发生在其他监控报告类似延迟时 有趣的是,详细的gc日志不会报告任何超过160毫秒的gc 我计划用下面的代码做另一个测试,看看延迟是否是因为做一个安全点的时间 -XX:+PrintGCApplicationStoppedTime -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 但是

我正在查看Java Flight Recorder转储中的事件,我看到一个VM操作
GC\u HeapInspection
,耗时6秒

这发生在其他监控报告类似延迟时

有趣的是,详细的gc日志不会报告任何超过160毫秒的gc

我计划用下面的代码做另一个测试,看看延迟是否是因为做一个安全点的时间

-XX:+PrintGCApplicationStoppedTime -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1

但是,对于这个问题,我想知道什么是
GC\u HeapInspection
以及什么可以触发它?

如果我没有弄错的话,
GC\u HeapInspection
是JVM在查看堆时,以便它可以找到可以被垃圾收集的对象。这意味着它扫描所有内存,然后检查每个对象的引用。它(可能)*在GC本身之前触发,或在STW事件之前触发

因为这只是检查,所以它可能没有作为GC记录。只要您不使用串行GC或并行GC,它就不应该停止您的应用程序。(只是在一定程度上放慢速度。除非有STW活动,它肯定比你所有其他地面军事系统都要短。)


*注意:这不是来自任何文档,我只是假设,
HeapInspection
意味着它正在检查堆,然后从中提取我知道的东西。

这是有用的推断。我想知道是否在某个地方(可能是JDK源代码)有所有Stop the World事件的列表,并找出哪些事件被标记为使用这种类型。根据堆栈溢出问题,当区域大小发生变化时,将触发完整GC。