JVM garbage collection

  • Uniprocessor Garbage Collection Techniques is a good introduction to some core theoretical concepts. This is the paper I read many many years ago and originally helped me become interested in garbage collection.
  • A Generational Mostly-concurrent Garbage Collector is what I think of as "the CMS" paper. It describes the CMS (concurrent mark/sweep) collector in HotSpot. For many ears this was the best option for trying to achieve low latency. It's a non-copying non-compacting old generation collector.
  • Garbage-First Garbage Collection is "the G1" paper. G1 is a newer garbage collector than CMS. This time, it is responsible for both the young generation and the old generation and it's a copying and compacting collector.
  • Azul collectors (these apply to Azul's JVM which AFAIK has never been freely available).
  • Current (2018) "state of the art" with respect to GC in freely available HotSpot are zgc and shenandoah.

Relatedly, you may be interested in scode/lrugctest which is designed to stress a garbage collector using a very simple simulation of a worst-case (for the GC) LRU cache. As of mid 2018, zgc and shenandoah are the only freely available HotSpot GCs that are capable of low (< 10 ms) pause times under that workload.