[gclist] Experience with conservative GC sought

David Gadbois gadbois@cyc.com
Fri, 16 Jan 1998 11:18:27 -0600


   From: sperber@Informatik.Uni-Tuebingen.De (Michael Sperber \[Mr. Preprocessor\])
   Date: 16 Jan 1998 09:41:51 +0100

   I'm looking for accounts, if part of research or just anecdotal, of
   experience with using conservative GC in long-running applications
   with large heaps and big changes in the size of the live data.

   [...]

   scm uses its own conservative collector which only scans the stack
   conservatively but does precise tracing for objects inside the
   heap.  I have used scm to run programs with (comparatively) high
   rates of data allocation.  The experience has been similar as with
   PLT: The heap grows far beyond the size of the live data and
   doesn't shrink back.

I do something similar and have not encountered problems.  Possible
explanations for the difference are:

1. On 32-bit machines, I locate the heap starting at the second
   quadrant of the address space.  This happens to be far removed from
   the stack and BSS in most address space layouts.  Perhaps folks who
   see lots of false positives might have their heaps near non-heap
   data.  It would be interesting to see of Wentworth's results also
   hold for 64-bit machines, where you have a lot more leeway about
   where to put the heap.

2. The codes I run are not numeric-intensive, so there are very few
   large numeric values on the stack that can be mistaken for object
   references.

3. There are relatively few stack-allocated blobs of random data such
   as IO buffers, which are a good source of false positives.

4. The decision about when to do a GC favors doing it in top-level
   loops where there is relatively little on the stack.

5. Objects have to go through several ephemeral generations before
   they get to the rarely (~days) GCed generation, so perhaps false
   positives on one GC get wiped before they get to the point where
   they cause problems.

6. Everything is word-aligned, so there no problem with interpreting
   cross-word values as object references.

It does seem counter-intuitive that conservative GC can work so well.
Over in comp.arch, someone posted a reference to Richard Hamming's
article "The Unreasonable Effectiveness of Mathematics"
(http://web.nps.navy.mil/~frazier/unreas.html).  Someone should write
"The Unreasonable Effectiveness of Conservative GC."

--David Gadbois