The function set-promote-generation-1
controls whether promotion can occur from generation 1 to 2. LispWorks starts with promotion on, so objects in generation 1 that survive a GC are promoted to generation 2. Calling set-promote-generation-1
with on nil
changes the behavior to leave those objects in generation 1.
set-promote-generation-1
can be repeatedly called to switch promotion on or off. It affects all threads.
When on is nil
and promote-all is non-nil then set-promote-generation-1
promotes all currently live objects to generation 2, and then switches off promotion of generation 1. If promote-all is t
, this promotion is done by a GC of generation 1. If promote-all is :full-gc
, it is done by a GC of generation 2.
Blocking promotion of generation 1 prevents "generation leaks", that is promotion of objects to generation 2 that die not long afterwards, but it causes growth of generation 1, which makes GC of generation 1 slower. As long as generation 1 is not too large, then that is not a problem, and blocking the potential leaks into generation 2 is useful. If generation 1 grows as a result of blocking promotion, GC of generation 1 starts to take noticeable time, and it is better not to block but to tune generation 2.
LispWorks User Guide and Reference Manual - 20 Sep 2017