There are 3 highly popular myths about garbage collection. Let's review those myths and the actual truth behind them.
Myth #1: Minor GCs don't pause the application
There are different types of garbage collection events: Minor GC event, Major GC event & Full GC event. It's been proposed that Minor GC are harmless, as they don't pause the application. However Major/Full GC are dangerous because they pause the application.
This is a lie. 100% lie. Minor GCs do pause the application. Minor GC pause times are comparatively lower than other GC events, most of the time. Thus, they could be called "harmless." However, in some cases, we have seen Minor GCs take more time than all the Major/Full GC events. Thus, when tuning your application, pay proper attention to Minor GC pause time metrics as well.
Myth #2: Serial GC performance is horrible
There are several types of garbage collection algorithms:
- Serial GC
- Parallel GC
- Concurrent Mark & Sweep (CMS) GC
- G1 GC
- Shenandoah GC
Each GC algorithm exhibits its unique performance characteristics. An incorrect education industry has been saying that serial GCs are not meant for serious applications. Serial GC performance characteristics are horrible, and they should be used only during development time or in prototype applications.
To validate this theory, we conducted a study on a major B2B travel application in production, which processes more than 70% of North America's leisure travel transactions. We configured a couple of servers to use the latest 'G1 GC' algorithm and a couple of servers to use the 'Serial GC' algorithm. We just used vanilla G1 GC and Vanilla Serial GC settings. We didn't pass any additional GC tuning parameters. Details about this study can be found here.
The results were that Serial GC performance to be comparable (in fact slightly better than) to G1 GC algorithm. Of course, with proper tuning and parameters settings, G1 GC can be made to run better than Serial GC. The take away is, Serial GC is not as bad as it's portrayed.
Myth #3: garbage collection is automatic. I don't have to worry about it.
I have heard a few developer friends saying, "garbage collection is automatic. I don't have to worry about it."
The first part is true, i.e. "garbage collection is automatic" on all modern platforms — JVM (Java Virtual Machine), ART (Android Run Time). But the second part is not so true. You do have to worry about it. Garbage collection is automatic, but it's not free. It comes with a price. In fact, the price can be very expensive. Poor garbage collection can lead to:
- Unpleasant user experience (SLA Breaches)
- Increase in the bill from cloud hosting providers
- Can put the entire application availability at risk
To learn about the profound impact of garbage collection, you may consider reading this article.
Author bio: Ram Lakshmanan
Every single day, millions & millions of people in North America — bank, travel, and commerce — use the applications that Ram Lakshmanan has architected. Ram is an acclaimed speaker in major conferences on scalability, availability, and performance topics. Recently, he has founded a startup that specializes in troubleshooting performance problems.