Modern garbage collectors (GC) fail to deliver despite significant investment in GC in the past decades. In this talk, I will show this is partly a result of inadequate methodology and tooling in performance evaluation and optimization, and how we can improve them.

Distillation. The real cost of GCs is surprisingly unclear until now. I will show a simple but yet effective methodology to empirically estimate the real cost of GCs. It reveals a worrying regression in production collector performance, as high as 17x computational overheads in small heaps! Such regression has gone unnoticed in production GCs’ quest to utilize increasingly parallel hardware, and serve latency sensitive applications.

Tracing. Debugging GC performance is notoriously difficult. Using MMTk as an example, I will show how performance tracing can be integrated in GC and yield high fidelity observations with rich context and low overhead. Our tools can help root-cause intricate performance bugs, such as poor scalability in multi-threaded GCs, and they do so without the cognitive friction from ad-hoc code changes and recompilation.

I hope these novel methodology and tooling can help designers and practitioners of managed languages uncover inefficiency in current systems, and inspire a new class of designs.