Java GC - Minor GC Collection 是 STW 事件吗?
Java GC - Is Minor GC Collection a STW event?
GC 是否需要对 Minor GC 或仅对 Full GC 进行“Stop The World”?据我了解,当 EDEN 中没有 space 可用于分配对象时,将发生次要 GC,那么这是否意味着对于每个次要 GC 都会有一个 STW 事件?
答案是“视情况而定”。
对于大多数现代Java收藏家来说,未成年人(年轻/伊甸园space)collection确实是stop-the-worldcollection。这不是由年轻 space 填满触发次要 GC 的直接逻辑结果。 (其他策略也可能触发次要 GC,或处理年轻的 space 填满。)相反,它只是......大多数 Java GC 的实现方式。
一个例外是 ZGC,它不是分代的。因此不存在未成年人collection。相反,当 GC 被触发时,会在找到 GC 根时短暂(小于 10 毫秒)停止世界事件。第二个例外是 Shenandoah GC,它同样不是分代的。
(当然,最初的 Java 1.1 GC 是 mark-sweep 收集器,non-generational 和 stop-the-world。)
读了几本书后,我发现 Minor GC 总是一个 Stop The World 事件,它将停止所有应用程序线程并且通常持续时间很短,而不是 Full GC 的 GC 暂停,后者将花费更多的时间,因为它将 运行 用于年轻代和老年代。所以 Minor GC 和 Full GC 总是 Stop the World 事件。
GC 是否需要对 Minor GC 或仅对 Full GC 进行“Stop The World”?据我了解,当 EDEN 中没有 space 可用于分配对象时,将发生次要 GC,那么这是否意味着对于每个次要 GC 都会有一个 STW 事件?
答案是“视情况而定”。
对于大多数现代Java收藏家来说,未成年人(年轻/伊甸园space)collection确实是stop-the-worldcollection。这不是由年轻 space 填满触发次要 GC 的直接逻辑结果。 (其他策略也可能触发次要 GC,或处理年轻的 space 填满。)相反,它只是......大多数 Java GC 的实现方式。
一个例外是 ZGC,它不是分代的。因此不存在未成年人collection。相反,当 GC 被触发时,会在找到 GC 根时短暂(小于 10 毫秒)停止世界事件。第二个例外是 Shenandoah GC,它同样不是分代的。
(当然,最初的 Java 1.1 GC 是 mark-sweep 收集器,non-generational 和 stop-the-world。)
读了几本书后,我发现 Minor GC 总是一个 Stop The World 事件,它将停止所有应用程序线程并且通常持续时间很短,而不是 Full GC 的 GC 暂停,后者将花费更多的时间,因为它将 运行 用于年轻代和老年代。所以 Minor GC 和 Full GC 总是 Stop the World 事件。