Linux and GC
P T Withington
ptw@pobox.com
Tue, 12 May 1998 18:12:21 -0400
On 5/12/98 17:04, Scott L. Burson wrote:
>
> Date: Tue, 12 May 1998 15:21:53 -0400
> From: P T Withington <ptw@pobox.com>
> On 4/28/98 18:17, Kragen wrote:
>
> Most snapshot-at-beginning implementations do not actually make a
> snapshot of the whole image, but rather arrange a write barrier, so that
> any changes to the image can be recorded and dealt with (e.g., by
> recording every value that gets overwritten).
>
>Well, if we're willing to call *that* a write barrier, then Al is right,
>because that's exactly what has been proposed.
>
> What looks difficult in your idea is that the list of dead objects to be
> communicated back to the mutator might be large. In a collector that is
> a co-routine, it is simple for the collector to pop those objects onto a
> free list. Where your collector is in a separate address space, some
> form of IPC is needed to communicate them back to the mutator.
>
>I had the same concern, but it's not a problem -- the two processes can just
>map a big chunk of shared memory.
>
>This scheme doesn't really make seem to make sense in the context of a
>copying
>collector; since the mutator process still has to do all the copying, and has
>to pause to do it, all the collector process has done is saved it some
>scanning work. Doesn't seem worth the trouble.
Or use a read barrier: an incremental copying collector uses a read
barrier to coordinate with the mutator by intercepting attempts by the
mutator to read references that may be changed by the GC.
You can use such a read barrier in a write-barrier GC to do compacting.
A read barrier can be simulated in software by an object table (i.e.,
every object reference is double indirect). This is how MacOS memory
works.
>In a non-copying scheme, if the collector had a way to write the mutator's
>memory, it could just go ahead and construct the freelist. This sounds to me
>like the best way to make use of this idea.
It would still have to synchronize with the mutator, since the freelist
is a shared data structure. This is what I meant by IPC.
>My concern about any freelist-based collector is that it does a component of
>work that's proportional to the number of dead objects. I generally prefer
>copying schemes, in part because their cost is related only to the number of
>live objects, which encourages a programmer not to worry about generating
>lots
>of short-lived garbage; without that concern, one tends to write more elegant
>code in many cases. (There's also the locality issue, of course.)
Agreed. But there are places for freelist collectors...
>Still, it's an intriguing idea.
>
>-- Scott
>
>