Garbage Collection is an integral part of application behavior on Java platforms, yet it is often misunderstood. As such, it is important for Java developers to understand the actions you can take in selecting and tuning collector mechanisms, as well as in your application architecture choices. In this presentation, Gil Tene (CTO, Azul Systems) reviews and classifies the various garbage collectors and collection techniques available in JVMs today. Following a quick overview of common garbage collection techniques including generational, parallel, stop-the-world, incremental, concurrent and mostly-concurrent algorithms, he defines terms and metrics common to all collectors. He classifies each major JVM collector's mechanisms and characteristics and discusses the tradeoffs involved in balancing requirements for responsiveness, throughput, space, and available memory across varying scale levels. Gil concludes with some pitfalls, common misconceptions, and "myths" around garbage collection behavior, as well as examples of how some good choices can result in impressive application behavior.
43. Reality check: servers in 2012
Retail prices, major web server store (US $, July 2012)
16 vCore, 96GB server ≈ $5K
16 vCore, 256GB server ≈ $9K
24 vCore, 384GB server ≈ $14K
32 vCore, 1TB server ≈ $35K
Cheap (< $1/GB/Month), and roughly linear to ~1TB
10s to 100s of GB/sec of memory bandwidth
Monday, July 9, 12 43
48. What quality of GC is responsible
for the Application Memory Wall?
It is NOT about overhead or efficiency:
CPU utilization, bottlenecks, memory consumption and utilization
It is NOT about speed
Average speeds, 90%, 95% speeds, are all perfectly fine
It is NOT about minor GC events (right now)
GC events in the 10s of msec are usually tolerable for most apps
It is NOT about the frequency of very large pauses
It is ALL about the worst observable pause behavior
People avoid building/deploying visibly broken systems
Monday, July 9, 12 48