Thanks for writing this, I agree especially with the first point. Scott Oaks&#x27;s &quot;Java Performance&quot; [1] does a good job of explaining the different GC&#x27;s available in the JVM. He also goes into the many, many GC-related JVM settings you can tune. However, as he acknowledges, the default settings are often hard to improve upon. The reason why many programs display bad behavior under memory pressure is that they are not written with a clear understanding of Java&#x27;s memory model. They allocate too many objects, or hold on to objects for too long even if they&#x27;re no longer needed (e.g. &quot;head retention&quot; in Clojure).<p>As powerful as the JVM is, it can&#x27;t magically fix your broken programs. Unfortunately many memory pressure problems remain hidden until you encounter production workloads. What I&#x27;d like to see most is practical advice on how to avoid these problems in the first place, how to debug them if they occur, and how to effectively test your code for leaks&#x2F;memory bugs.<p>[1] <a href="http:&#x2F;&#x2F;www.amazon.com&#x2F;Java-Performance-Definitive-Scott-Oaks&#x2F;dp&#x2F;1449358454&#x2F;ref=sr_1_1?ie=UTF8&amp;qid=1461409189&amp;sr=8-1&amp;keywords=java+performance" rel="nofollow">http:&#x2F;&#x2F;www.amazon.com&#x2F;Java-Performance-Definitive-Scott-Oaks...</a>