Thank you Juho and Dan for your suggestions. I try to restructure the program to better fit generational garbage collector.
BUT this question remains:
Does the sbcl have to exhaust heap unrecoverably? Could it _dynamically temporalily_ either change to 2-generation gc, or force deeper gc to keep program running when facing that situatiuon? When it is constantly growing hunger for memory it may not be worth it. But when it could be only a peak in memory usage, it is worth trying rather than dying.