[M3devel] gc/barriers?

Tony Hosking hosking at cs.purdue.edu
Thu Nov 5 20:27:40 CET 2009


For a description of the current concurrent CM3 GC algorithm I suggest  
you take a look at my ISMM'06 paper: http://www.cs.purdue.edu/~hosking/papers/ismm06.pdf 
.

You are correct in stating that the write barriers used in the CM3  
collector are used for generational GC, to keep track of updates to  
objects in the older generation.  That way, when collecting just the  
younger generation we can focus our attention to those pages of the  
older generation that refer into the younger generation.  Note that  
all surviving young objects are promoted into the older generation at  
every GC cycle.  Thus, there are never young objects referred to by  
old objects at the end of GC.

The read barrier is used to protect against mutator threads executing  
concurrently with the garbage collector from acquiring pointers to  
objects that have not yet been scanned by the garbage collector.  We  
divide objects into those that are black (scanned by the garbage  
collector), grey (reached but not yet scanned), and white (not yet  
reached).  At the end of the GC cycle unreached objects are garbage.   
The CM3 collector maintains an invariant that black objects can never  
contain pointers to white objects.  Moreover, the read barrier ensures  
that mutator threads hold only pointers to black objects.  This  
prevents the mutator from copying a pointer to a white object into a  
black object.  Otherwise, the collector might never reach that white  
object and it would be freed even though it is reachable from the  
black object.

Impure objects contain pointers.  Pure objects are "leaves" in the  
object graph -- they contain no pointers.

On 5 Nov 2009, at 13:19, Jay K wrote:

>  > Feel free to ask if you have questions.
>
> On a different matter.... can you, um, explain garbage collection?
> Specifically barriers?
> And the five states? Are they just older/younger?
>
>
> I understand "the generational hypothesis".
> "Most objects die young".
>  (Most objects could be stack allocated. :) )
>
> And then there is a need to divide objects, at runtime, into older  
> and younger.
>
> And then, there is some need to notice pointers that cross  
> generations?
> That is, "old" usually includes no garbage, unless it has been  
> changed since
> the last check, and then needs a new check?
>
> That is, a write barrier is a sort of copy-on-write, or notice- 
> writes mechanism?
> A write into a generation means the gc needs to check it?
>
> That is, if you look at the Win32 GetWriteWatch API, that's what we  
> are simulating sort of?
> (or vice versa)?
>
> I'm really guessing.
> And this doesn't explain what, if anything, a read barrier is.
>
> But then is meant by gray/impure/etc.?
>
> Maybe checkin RTCollector.readme?
>
> (note that read/write barriers are other things too -- ways to enforce
> (relative) order of executation).
>
>  - Jay
>
>
>
>
>




More information about the M3devel mailing list