Re: Daily gclist MIME digest V5 #52

"David F. Bacon" <[email protected]> Fri, 13 Jan 2006 22:25:06 -0500
Newsgroups gmane.comp.programming.garbage-collection.general
Message-ID <[email protected]>
yes, one of the differences in rajan and my algorithm (uni- and
multi-processor) is that the "tentative decrement" phase is done once for
all candidate objects, and then the "undecrement" and the "reap" phases.
that makes the algorithm linear rather than quadratic.

http://www.research.ibm.com/people/d/dfb/publications.html#Bacon01Concurrent

david
----- Original Message ----- 
From: "Larry Evans" <[email protected]>
To: <[email protected]>
Sent: Friday, January 13, 2006 5:00 PM
Subject: Re: [gclist] Daily gclist MIME digest V5 #52


> On 01/12/2006 12:41 PM, Jesus Cea wrote:
>
> (NOTE_TO_MOD:  I sent this earlier before
> subscribing.  Hopefully it won't appear
> twice.
> )
> [snip]
>
> >
> >>[1] LINS,R.D.Cyclic reference counting with lazy
> >>mark-scan.Inf.Process.Lett.44,4 (Dec.
> >>1992),215?220.
> >
> >
> > http://www.cs.kent.ac.uk/pubs/1992/120/
> >
> > I've not read it yet, but his approach seems similar to my current work:
> > If the ref count is zero, I delete the object. If the refcount is not
> > zero, I add the object to a lazy mark&sweep structure. From time to
> > time, I scan the structure. For each object there, I get its ref count
> > and keep it in a variable. Then I follow the graph references from
> > there. Each time I reach the initial object, I decrease the variable
> > that maintains the running reference count of the object. If that
> > variable is zero, then this object lives in a cyclic structure and the
> > only pointers to it comes from that structure. If all other objects in
> > the structure only have internal pointers also, we can recicle it
> entirely.
>
> Another difference, IIRC, is that the Lins method decrements the count
> as the local graph is traversed.  It then has to increment the same
> counts during another traversal if no cycle was found.  One difference
> w.r.t. a uniprocessor version Bacon's method is the method of
> traversing the graph. I *think* Bacon doesn't mix the "phases" when
> doing graph traversal.  IOW Lins, during graph traversal, switches
> between phases, whereas Bacon traverses the whole graph while only
> doing phase(i), then traverses the whole graph doing phase(i+1).  I
> *think* this makes Bacon's a bit faster, IIRC.
>
> As noted by the GC-book[1996], p. 67, when the "control set" in Lins'
> lazy method is the entire heap, then Lins method is *almost* the same
> as Christopher's.  There's currently an implementation of
> Christopher's method in the Boost sandbox in a policy_ptr directory:
>
>    http://tinyurl.com/derxd
>
> The above test driver tests both a conservative collector
> (std_shared_graph_tagged) and a precise collector
> (std_shared_graph_accepting).  The precise one is implemented
> using the fields_visitor library:
>
>    http://tinyurl.com/93lt5
>
> A draft of the fields_visitor user's guide is in the boost vault:
>
>     http://boost-consulting.com/vault/index.php
>
> under the 'Memory' directory.
>
>
> [snip]
> >>[3] MART?INEZ,A.D.,WACHENCHAUZER,R.,AND LINS,R.D.Cyclic reference
> counting
> >>with local mark-scan.Inf.Process.Lett.34,1 (1990),31?35.
> >
> >
> > This paper is "superseded" by [1] :-) .
>
> One advantage of this one over [1] is that there's no delay in the
> garbage collection.  IOW, as soon as the a node becomes garbage, it's
> collected (after, of course, the 3 traversals of the local graph are
> done).  This may be useful for scarce resources (e.g. open file or
> database connection) held by some object on the heap.
>
> There is a c++ implementation at:
>
>    http://tinyurl.com/c3pml
>
> it's based on an earlier version of the policy_ptr code mentioned
> earlier.  In a still earlier version of some code, I'd parameterized
> a garbaged collected object (used as argument to an intrusive smart
> pointer), with flags indicating whether eager [3] or lazy [1]
> collection was desired:
>
> enum crc_zeal
> { crc_eager
> , crc_lazy
> };
>
> Each gc'ed object would be derived from subjtop_crc<crc_zeal>,
> which would be collected either eagerly or lazily, depending
> on the crc_zeal template argument.
>
> Eventually, I'm hoping to get these different policies, as well as
> some more, into the boost policy_ptr library.
> [snip]
>
>
>