Normal allocation is done from a buffer, called the small objects buffer. The Garbage Collector (GC) maintains a pointer to the beginning and end of the buffer, and allocates from it by moving one of the boundaries. When the buffer becomes too small the GC finds another free block and makes that the buffer.
The minimum and maximum size of free block that the GC uses for the small objects buffer can be set by
set-gc-parameters, using the keywords
:minimum-buffer-size
and
:maximum-buffer-size
. If the minimum size is too small, the system allocates buffers more frequently, thus slowing the program. Making the minimum too big causes more fragmentation, because small free blocks are not used. There is no easy way to determine the optimal values for the small objects buffer, except by experiment.
When there is an overflow the small object buffer is allocated in the big-chunk area, and then a bigger buffer is allocated (see below).