'Kay, here's a quick overview of how memory, garbage collection, and dead object detection are going to work in Parrot. (And I appreciate this getting raised now, BTW--both because it's about time and because it makes me think about it in time for next saturday)
There are three sets of memory pools for each interpreter. They are: *) The PMC pool *) The Buffer header pool *) The honking great slab of memory pool The PMC and buffer pools each consist of one or more arenas, while the HGSOM pool has one or more slabs of memory allocated to it. Each arena is thread-private, and no other interpreter can allocate out of it. When the interpreter needs to do a garbage run, it runs through all the PMCs in the PMC pool. Any that look like they might be live and that point to buffer objects are assumed to be alive, and the memory their buffer objects points to is collected. It's essentially a barely-conditional sweep, with the assumption that dead objects are marked as such and thus won't be collected The dead object phase is essentially the mark phase of a GC run. We mark all the PMCs in the pool as unused, start with the root set and then mark all the used ones. When we run out, any PMCs that were used but aren't pointed to are then marked as unused so garbage runs will ignore them. If any of these PMCs require active destruction then that'll be done here. If at any point an arena or memory slab is completely unused, it may be handed back. Whether that's to the system or a global allocator's up in the air--I can see it going either way. Separating things this way means that a garbage run without an immediately preceding DOD run may collect on some PMCs that are really dead. That's OK. Also, we may well use a vmem system to allocate buffer headers rather than using per-interpreter pools of arenas. I can see it going either way, and if we have several sizes of buffers it might be more space-efficient to do so, but on the other hand using arenas makes collecting the buffer headers, which can be done during DOD time, easier. (Basically we wouldn't need to explicitly free those either, and could trace the used and unused buffer objects at DOD time) This help any? Dan --------------------------------------"it's like this"------------------- Dan Sugalski even samurai [EMAIL PROTECTED] have teddy bears and even teddy bears get drunk