G1 GC 中如何管理栈根
How roots from stack are managed in G1 GC
Java如何在 G1 垃圾收集器中管理来自堆栈的 Root 对象?它是否在垃圾收集(年轻阶段或混合阶段)时遍历所有 mutator 线程的堆栈,或者是否有一些其他类似记忆集的数据结构(用于保留代际指针的引用)以节省时间?
有没有相同的文档。
始终扫描线程堆栈,不仅在G1
;但是在 JVM 上实现的所有其他垃圾收集器中都是 afaik。 GC
必须从一些 已知的 根开始,以便找出什么是活的,什么不是。在任何 java 的 GC 的情况下,这些根由各种部分组成,其中包括:线程堆栈。
在每个周期,这些都会被扫描;毕竟它们 将 发生变化,并且在每个周期中可能会有所不同。痛苦的部分是 until this is implemented,这是一个 stop-the-world 阶段。由于安全点轮询或线程数,STW
阶段可能会变大。在现实生活场景中(至少在我所涉及的场景中),这不是问题;这是一个快速的过程(Shenandoah 2.0
,我看到最多 15 ms
暂停)。
remembered sets
以某种方式实现 .
Java如何在 G1 垃圾收集器中管理来自堆栈的 Root 对象?它是否在垃圾收集(年轻阶段或混合阶段)时遍历所有 mutator 线程的堆栈,或者是否有一些其他类似记忆集的数据结构(用于保留代际指针的引用)以节省时间? 有没有相同的文档。
始终扫描线程堆栈,不仅在G1
;但是在 JVM 上实现的所有其他垃圾收集器中都是 afaik。 GC
必须从一些 已知的 根开始,以便找出什么是活的,什么不是。在任何 java 的 GC 的情况下,这些根由各种部分组成,其中包括:线程堆栈。
在每个周期,这些都会被扫描;毕竟它们 将 发生变化,并且在每个周期中可能会有所不同。痛苦的部分是 until this is implemented,这是一个 stop-the-world 阶段。由于安全点轮询或线程数,STW
阶段可能会变大。在现实生活场景中(至少在我所涉及的场景中),这不是问题;这是一个快速的过程(Shenandoah 2.0
,我看到最多 15 ms
暂停)。
remembered sets
以某种方式实现