Java Finalization's Memory-Retention Issues
I recommend taking a look at "How to Handle Java Finalization's Memory-Retention Issues," by Sun's Tony Printezis on java.sun.com.
Finalization allows you to perform postmortem cleanup on objects that the garbage collector has found to be unreachable. It's normally used to reclaim native resources associated with an object. Tony describes how finalization is implemented in a JVM; he identifies problems where memory can be unnecessarily
retained by finalizable objects, and offers solutions, plus advice on when and when not to use finalization.
If the topic intrigues you, check it out.