Douglas Roberts wrote:
> No, not true.  It is because the C++ developer is responsible for 
> freeing memory that has been allocated (new, free operators) that C++ 
> does not need a garbage collector.
> 
> In java , memory deallocation is automatic -- it is done by the garbage 
> collector.  Keeping track of memory that is no longer referenced by the 
> running program and therefore needs to be freed is an expensive 
> operation that C++ is not burdened with.  See
> 
> http://www.javaworld.com/javaworld/jw-08-1996/jw-08-gc.html
 >
 > for more on this topic.

In 1996 Java certainly had many performance problems, and many of those 
have been addressed over the last 10 years.  O'Reilly's "Java 
Performance Tuning" describes the changes from 1.2 to 1.3 as "dramatic." 
  An article describing the new 1.3 garbage collector is:

www.javaworld.com/javaworld/jw-01-2002/jw-0111-hotspotgc.html

If you're curious how long it's taking in a given app, you can run it 
with -verbosegc or -Xloggc:<filename>.  There are various free, open 
source tools to visualize the results, such as GCViewer:

http://tagtraum.com/gcviewer.html

The wikipedia has a good article on garbage collection.  In the section 
on performance, it talks about why automatic GC can be slower than 
explicit memory management, but also why it can be faster:

"Despite these issues, for many practical purposes, 
allocation/deallocation-intensive algorithms implemented in modern 
garbage collected languages can actually be faster than their 
equivalents using explicit memory management (at least without heroic 
optimizations by an expert programmer). A major reason for this is that 
the garbage collector allows the runtime system to amortize allocation 
and deallocation operations in a potentially advantageous fashion."

It goes on to give an example.

It's also quite possible to explicitly manage memory in a GC language 
like Java or LISP.  You can allocate an array of objects of your 
favourite type, the have a factory method that returns references to 
array elements, and a "delete" method so your manager knows when it can 
be reused.  At the company I work for, ITA Software, our airfare search 
engine is written mostly in LISP, with core parts in C++.  We use 
techniques like that to manage the few classes that are 
allocated/deallocated frequently, and use the garbage collector for the 
rest.  Garbage collection is only a few percent of our runtime.

- Martin

============================================================
FRIAM Applied Complexity Group listserv
Meets Fridays 9a-11:30 at cafe at St. John's College
lectures, archives, unsubscribe, maps at http://www.friam.org

Reply via email to