When the GC runs out of memory, it has to find more memory. Normally (that is, when allocating in generation 0) the first operation is a mark and sweep. Before performing the mark and sweep, the GC compares the amount of memory allocated since the previous mark and sweep with the
:minimum-for-sweep
value, which is set by
set-gc-parameters. If the amount allocated is less than
:minimum-for-sweep
the GC does not do a mark and sweep, but causes an overflow (described below). This prevents an excessive number of mark and sweep operations in periods when the program allocates a large amount of data which stays alive.
If more than
:minimum-for-sweep
has been allocated, a mark and sweep operation takes place. After this operation the GC checks that the segment it was trying to allocate to has more free space than the minimum free space for this segment. If the remaining free space is less than
minimum-free-space
, the GC tries to create more free space by promoting objects from the segment.
Before promoting, the GC performs two checks. First, it checks that there are enough objects marked for promotion to justify a promotion operation. The minimum free space for a segment is set by
set-minimum-free-space, and can be shown by
(room t)
.
Second, the GC checks that there is enough free space in the next generation to accommodate the promoted objects. If there is insufficient space, the GC tries to free some, either by a mark and sweep on the next generation, promoting the next generation, or by enlarging the generation.
The minimum amount of space for promotion is the value
minimum-for-promote
, which is set by
set-gc-parameters.
If there is insufficient space, and there are not enough objects marked for promotion, the GC increases the size of the image, by overflow, as described below.
On Motif only, note that the GC monitor window does not indicate a mark and sweep of generation 0, as this operation takes a small amount of time (it would take longer to change the display of the window). The GC monitor window appears only in the Motif IDE.
LispWorks User Guide and Reference Manual - 21 Dec 2011