Lazy Pointer Update for Low Heap Compaction Pause Times
To keep applications highly responsive, garbage collectors (GCs) try to minimize interruptions of the application threads. While pauses due to non moving GCs can be drastically reduced through concurrent or incremental strategies, compaction pauses remain a big problem.
A strategy to decrease stop the world compaction pauses is to compact subsets of the heap at any one time. But this only reduces the time spent in moving compacted objects, not the time spent updating all references to those objects, which may be significant in large heaps. In this paper, we propose to only move compacted objects during the compaction pause, replacing moved objects by low-overhead forwarding objects. References to compacted objects are lazily updated while the application is running and during the next GC marking phase, outside of the compaction pause.
We evaluate our technique on a suite of high workload (2 to 14Gb) benchmarks built from a real industrial application. Results show that not updating pointers during the compaction pause decreases the median pause up to 31% and the longest pause up to 71% on these benchmarks, while the forwarding objects slow down execution time without GC by no more than 1%.
Sun 20 Oct
|16:00 - 16:30|
|16:30 - 17:00|
Thomas DupriezUniversité Lille, CNRS, Centrale Lille, Inria, UMR 9189 - CRIStAL, Guillermo PolitoUniv. Lille, CNRS, Centrale Lille, Inria, UMR 9189 - CRIStAL - Centre de Recherche en Informatique Signal et Automatique de Lille, Steven Costiou INRIA Lille, Vincent AranegaUniversité Lille, CNRS, Centrale Lille, Inria, UMR 9189 - CRIStAL, Stéphane Ducasse INRIA LilleMedia Attached
|17:00 - 17:30|
Marcel WeiherHasso-Plattner-Institut (HPI), Germany, Robert HirschfeldHasso-Plattner-Institut (HPI), GermanyPre-print Media Attached