On Jul 26, 2007, at 10:43 AM, Bert Freudenberg wrote:
since Squeak (fortunately) has a garbage collector, the heap does not just consist of actual objects, but also of chunks of unused memory. However, these also have an object header to be more easily handled: during allocation, the memory manager must be able to find a free piece of heap memory to assign it to the newly allocated object. These chunks of free memory are what the VM code calls "free objects".
To clarify this, the memory allocation logic does not scan for these free spaces when allocating new objects. Rather it allocates memory from the end of the image which is the free space after the last GC, by using a simple math on the freeblock pointer.
A simplistic view:
After N allocations or if we can't allocate the memory a incremental GC is done which garbage collects young space and makes the free blocks as it find objects that are garbage. After the mark sweep phase of the GC, it runs compact phase which then moves objects down to perculate all that free space up, then resets the freeblock pointer. At this point young space is fully compacted. If a full GC runs, then all of object memory is GCed and compacted leaving no free blocks in memory.
-- ======================================================================== === John M. McIntosh johnmci@smalltalkconsulting.com Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com ======================================================================== ===