【问题标题】:How roots from stack are managed in G1 GCG1 GC 中如何管理来自堆栈的根
【发布时间】:2020-11-23 10:37:00
【问题描述】:

Java 如何在 G1 垃圾收集器中管理堆栈中的 Root 对象?它是否在垃圾收集(年轻或混合阶段)时遍历所有 mutator 线程的堆栈,或者是否有一些其他数据结构类似的记忆集(用于保持代际指针的引用)以节省时间? 有没有相同的文件。

【问题讨论】:

  • 据我所知,它只是扫描堆栈。缓存传出引用不会产生太多,因为预计堆栈会在垃圾回收周期之间发生变化(因为没有 mutator 线程活动,根本没有理由执行另一个 gc)。

标签: java garbage-collection g1gc


【解决方案1】:

线程堆栈总是被扫描,不仅在G1;但是在JVM上实现的所有其他垃圾收集器中都是afaik。 GC 必须从一些 已知 根开始,以便找出什么是活着的,什么不是。对于任何 java 的 GC,这些根由不同部分组成,其中包括:线程堆栈。

在每个循环中,都会扫描这些;毕竟它们改变,并且在每个周期中可能会有所不同。痛苦的部分是until this is implemented,这是一个停止世界的阶段。由于安全点轮询或线程数,STW 阶段可能会变大。在现实生活场景中(至少是我参与过的场景),这不是问题。这是一个快速的过程(Shenandoah 2.0,我看到最多 15 ms 暂停)。

remembered sets 以某种方式实现different role

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2011-09-16
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多