On Wednesday, 5 February 2014 at 12:12:01 UTC, Paulo Pinto wrote:
Yes, the GC just needs to check roots for already released blocks, if I am not mistaken.

Yes, when they go to non-zero. This is the scheme used in PHPs ARC/GC solution, published in this paper:

http://researcher.watson.ibm.com/researcher/files/us-bacon/Bacon01Concurrent.pdf

You push roots that are candidates onto a queue when the counter is decreased to nonzero, then you do a concurrent scan when you have a set of roots to scan for cycles. So you probably need a clever ARC to reduce the scanning.

I think however, that for most programs that use ARC you don't do the GC at all. For long lived processes such as servers you might run it using heuristics (based on memory headroom or during the night). According to the paper above the amount of cyclic garbage tends to be low, but varies a great deal. They site another paper relating to Inferno that supposedly claims that RC caught 98% of the garbage. So the need for cycle collection is rather application specific.

Perl has traditionally not caught cycles at all, but then again perl programs tends to be short lived.

----

There are also some papers on near real time GC, such as Staccato and Metronome, on David F. Bacons list:

http://researcher.watson.ibm.com/researcher/view_pubs.php?person=us-bacon&t=1

Reply via email to