One reason Java has garbage collection

From Slashdot Technology Story | Java Gets New Garbage Collector, But Only If You Buy Support

Re:Forgive my ignorance WAS:re: Garbage collector? (Score:5, Insightful)

by Thomasje (709120) on Friday May 29, @03:49PM (#28142801)

The reason why Java has garbage collection has nothing to do with programmer convenience; it is needed in order to make Java’s security model work. Without garbage collection, a thread could allocate a chunk of memory and then free it, while hanging on to the pointer — and then periodically take a look at what shows up in the memory area where the previously freed block used to be. Any Java process running in the same VM would be at risk. This kind of deliberate use of “dangling pointers” is easy to prevent if using garbage collectors, very difficult to prevent otherwise.

Protecting processes running in the same VM from each other may not seem terribly useful now, but Java was originally designed to be used in embedded controllers, where the JVM would *be* the operating system, and where processes had to be protected from each other without the help of a hardware memory management unit.

FWIW, I also beg to differ about the difficulty of manual memory management. In C++ it is usually very easy, as long as you’re consistent about doing deallocations in destructors. I once had to write a 40,000+ line C++ program, with lots of dynamic memory management going on; once development was complete, I ran a complete test suite under Purify, and found 5, yes, five, memory leaks. Considering that most leaks are the result of mis-handled object ownership, which is an issue that garbage collection does not eliminate in general, you should be careful about your design, *and* use memory analyzers like OptimizeIt, even when developing in a GC environment.

[Slashdot] [Digg] [Reddit] [del.icio.us] [Facebook] [Technorati] [Google] [StumbleUpon]

Comments are closed.