0.8.7.3
Some essential-for-my-comprehension purify and gencgc
refactoring. Some functional changes too, though none that
seem to make any difference in practice
Ripped out vast swathes of "is this a large object" checking
in gencgc's allocation routines. Now the only criterion for
whether an object is handled as a large object is whether its
size exceeds the large object threshold.
Fixed bug in gc_find_freeish_pages that was causing lots of
fragmentation: allocation regions for small objects may now
start on the same page as previously closed regions with the
same characteristics
Fixed rarely-observed bug in gencgc_pickup_dynamic so that it
doesn't create a single xMb region from the whole of dynamic
space when a core is loaded, instead splitting the space into
as many regions as it can (this may be related to bug 95,
though I don't /really/ want to claim I fixed that until I see
better what the problem is there). Unless you save unpurified
cores you're unlikely to be bitten by this often.
New newspace_alloc routine in purify.c makes it all a bit
easier to see what's going on there.
Replace all hand-coded memory-copying loops with memcpy(); the
compiler should be able to optimize this better than we can
(actually makes no difference that I can detect to execution
time, but the code is now shorter)