Abstract: Properly freeing external resources such as files and connections in a garbage collected environment requires care. The JVM's finalize() and PhantomReference features provide APIs and JVM targetted languages a way to handle the common case of a forgotten close. Unfortunately these capabilities are deeply flawed, and require specialized techniques to use correctly. This session will dive deeply into the problem, showing how the JVM can get it wrong. It will offer useful tips on how developers can safely manage their resources, and never forgot to close. In addition, API and language designers will gain more insight into the inner-workings of the JVM, and how they can safely avoid the peril of JVM finalization.