[Openmcl-devel] GC aspects, tuning, behavior

Jon S. Anthony j-anthony at comcast.net
Sun Jun 28 13:31:26 PDT 2009

On Sun, 2009-06-28 at 14:07 -0400, Jon S. Anthony wrote:

> Start with a major/global/full GC.  Save the current value of
> lisp-gc-heap-threshold. Set the threshold limits of gen-1 and gen-2 (NOT
> gen 0) to something very small.  Actually how about just 0.  Set
> lisp-heap-gc-threshold "high" - basically enough to hold all the objects
> to be created.  Create objects.  There should be no minor GC during this
> as they should all fit in Gen 0.  Do a full GC.  Set
> lisp-gc-heap-threshold back to its saved (previous) value.  I guess this
> part depends on promotion policy: Will all these things be moved to old
> space at this point?

This isn't going to work, not the least reason for which is that it
doesn't account for the generation thresholds.  You'd have to set Gen
0's limit to something around the size set for heap threshold.  But even
then, after thinking about it, I think this may work rather poorly since
it can't really account for real garbage that will accumulate.  It's
plausible that may be more (much more even) than the objects you want to
tenure to old space.  So, Gen 0 may end up being traced many times, and
since it will be containing a lot of those new "undying" objects, the
size it has to trace will grow and grow causing the whole thing to
degrade in overall performance.  It's possible that the promotion policy
(which I don't know at this point) might save the situation by promoting
sizable groups of these objects before things really degrade.  Maybe.
But even so, doesn't sound too good...


More information about the Openmcl-devel mailing list