I believe that garbage collection is a net win because it allows software to be composed in simple ways when it would otherwise be difficult to compose.<p>I can pass data from one part of the program to another without coordinating both parts to respect the same memory management convention, and without having to pass that information from one place to another. This makes it easier to compose software, and in particular to reuse software like libraries (that frequently end up as layers between one component and another). For a concrete example, in a Java program I can simply publish an event into a Guava EventBus [1] without worrying where it will end up at the time I write that code. There&#x27;s no real risk that I&#x27;ll end up with a memory leak. I can connect two things together that weren&#x27;t designed to be used together, and I can do it while inserting intermediate layers that transform, copy, record, measure, that data.<p>Garbage collection significantly reduces the amount of coordination necessary between unrelated parts of the code base, thereby improving code reuse. This is what I would claim is less commonly recognized win, beyond the more commonly recognized wins from eliminating classes of obvious mistakes. EventBus is just one random example that involves plugging things together - the same effect is present all over Java libraries, from logging frameworks to collections to concurrent data structures.<p>[1] <a href="https:&#x2F;&#x2F;github.com&#x2F;google&#x2F;guava&#x2F;wiki&#x2F;EventBusExplained" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;google&#x2F;guava&#x2F;wiki&#x2F;EventBusExplained</a>