A nice article in the current Overload (issue 59, February 2004) on the bogosity of garbage collection in Java. Memory is just one resource; the lack of destructors in Java is a large hurdle to managing other resources such as network and database connections. And
finalize() is just plain broken. All is not lost, but there's more work to managing resources (including memory) than just "code and forget", the most common practice I see in Java.