[gclist] Java Developer's Journal GC advice

Pekka P. Pirinen pekka.p.pirinen@globalgraphics.com
Fri, 5 Sep 2003 17:24:24 +0100


I bought Java Developer's Journal last week (Volume 8 Issue 7) to see
what's going on in the Java world and because it had a GC cover story:
"Avoid Bothersome Garbage Collection Pauses" (by some people at
Lockheed-Martin: Lillian Andres, Chris Cargado, M. Valerie Underwood).
Turns out they dole out some rather simplistic advice: incremental GC
is dismissed with "timimg [...] may be inopportune", and they
esssentially recommend manual "freeing" (by setting pointers to null)
and explicit scheduling (System.gc) by the application.

They summarize their advice in three steps:

  1. Set all objects that are no longer in use to null and make sure
     they're not left within some collection.  "Nullify" objects.
  2. Force garbage collection to occur both:
    * After some major memory-intense operation (e.g., scaling an
      image) 
    * At a periodic rate that provides the best performance for your
      application 
  3. Save long-lived data in a persistent data area if feasible or in a
     pool of data and use the appropriate garbage collector algorithm.

The last one is good advice.  So is forcing GCs after some
memory-intense operations, but explicitly calling System.gc at
intervals of X ms doesn't sound like an optimal way of tuning GC.  I
don't have experience on this, but surely JVM GCs have tuning
parameters that give better behaviour?

Their example for nullifying shows a method that recursively sets all
the object references.  This has bad caching behaviour and
reintroduces half the problems of manual memory management, but they
don't even mention that.
-- 
Pekka P. Pirinen
A programming language is low level when its programs require attention to
the irrelevant.  - Alan Perlis