【问题标题】:What Is GC_HeapInspection And What Can Trigger It?什么是 GC_HeapInspection,什么可以触发它?
【发布时间】:2020-03-11 17:58:27
【问题描述】:

我正在查看来自 Java Flight Recorder 的转储中的事件,我看到一个 VM 操作 GC_HeapInspection 耗时 6 秒。

这发生在其他监控报告类似延迟的时间点。

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

我打算用下面的方法再做一次测试,看看延迟是不是因为做安全点的时间

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

但是,对于这个问题,我想知道GC_HeapInspection 是什么,什么可以触发它?

【问题讨论】:

    标签: java


    【解决方案1】:

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

    由于这只是检查,它可能*没有记录为 GC。只要您不使用串行 GC 或并行 GC,它不应该停止您的应用程序。 (只是在一定程度上减慢它。除非有一个 STW 事件,这肯定会比你所有其他 GC 更短。)

    *注意:这不是来自任何文档,我只是假设HeapInspection 表示它正在检查堆,然后处理我从那里知道的事情。

    【讨论】:

    • 这是有用的推论。我想知道是否在某个地方(可能是 JDK 源)列出了所有 Stop The World 事件,并找出哪些事件被标记为使用这种类型。
    • 看一些代码here,好像只有full GC才会触发。根据this Stack Overflow 的问题,当区域大小发生变化时会触发完整的 GC。
    猜你喜欢
    • 2011-01-19
    • 1970-01-01
    • 2017-04-09
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多