The Java world offers memory safety and automatic memory management, including reclamation. You don't have to worry about accidentally freeing memory, creating leaks, or seeing garbage in the memory you just got. This all comes at a price, because nothing in life is free. We can choose from G1, SerialGC, ParallelGC, EpsilonGC, ZGC (two flavors), and ShenandoahGC. If we include OpenJ9, we have another six GC concepts or policies available. But which is the right one, and when do we even need to care? What does each GC deliver, and how does it change latency, CPU, and memory usage? The talk will use several applications to demonstrate the impact of GCs, the changing CPU and memory requirements, and the performance differences. A microservice, an e-commerce application, a data processing application, and a microbenchmark will be used. Some measurements will be performed live. As we explore GC behavior, we will quickly touch on the basic concepts of each GC and its advantages and disadvantages, if any. As a bonus, we will also look at Project Lilliput, which does not deliver a new GC, but changes some memory layout that the GC relies on. P.S. Can also be a Deep Dive.

Talk Level:
INTERMEDIATE

Bio:
René Schwietzke is the Managing Director of Xceptance, based in Germany and the United States. He is a seasoned IT professional with over two decades of experience in performance tuning and measurement, starting his journey with Java version 1.0. During his tenure at various e-commerce and quality assurance companies, he honed his expertise in optimizing and fine-tuning large-scale applications. His academic background includes a Master's degree in Computer Science, and he actively shares his knowledge by lecturing at universities and presenting at international software development conferences. He is also a frequent speaker for training sessions on Java, garbage collection, memory management, quality assurance, and testing.