-
Enhancement
-
Resolution: Unresolved
-
P5
-
None
-
None
-
generic
-
generic
Pacing describes the effort to assure that GC activities complete before service threads deplete the available free pool. Pacing is effective only when GC activities are not idle. The question of when to begin GC activities is answered by heuristics, as addressed in tickets https://bugs.openjdk.java.net/browse/JDK-8282833, https://bugs.openjdk.java.net/browse/JDK-8282834, and https://bugs.openjdk.java.net/browse/JDK-8282836.
The intended benefits of traditional (non-generational) Shenandoah pacing have been elusive. When pacing is enabled, overall throughput is degraded because allocation stalls are introduced. Moreover, the pacing heuristics do not significantly reduce the frequency of degenerated collections. Pacing is more critical in generational mode, because we must not only balance the division of labor between service and GC threads, but also between young-gen and old-gen GC threads. This effort seeks to implement a pacing subsystem that is (1) aware of generational memory regions and efforts, (2) that incurs less performance degradation on service threads than the existing non-generational pacer, and (3) that reduces (or may even largely eliminate) the need for degenerated and full GC stop-the-world pauses.
The intended benefits of traditional (non-generational) Shenandoah pacing have been elusive. When pacing is enabled, overall throughput is degraded because allocation stalls are introduced. Moreover, the pacing heuristics do not significantly reduce the frequency of degenerated collections. Pacing is more critical in generational mode, because we must not only balance the division of labor between service and GC threads, but also between young-gen and old-gen GC threads. This effort seeks to implement a pacing subsystem that is (1) aware of generational memory regions and efforts, (2) that incurs less performance degradation on service threads than the existing non-generational pacer, and (3) that reduces (or may even largely eliminate) the need for degenerated and full GC stop-the-world pauses.