Re: rotor GC

David Stutz <[email protected]>
Newsgroups gmane.comp.windows.devel.dotnet.rotor
Message-ID <004501c33500$a8d158b0$6701a8c0@StutzT30>
copy_object_simple copies the object and sets a forwarding pointer. To
avoid leaving dangling refs, you must make a scan after all copying is
done and fix-up any references that still point to old locations. The
scan that does fix-up occurs after all objects have been moved, using
get_copied_object rather than copy_object_simple. In the book, the
section entitled "Relocation Fix-up" gives a brief account of this -
sorry it wasn't more clearly explained.

With regards to question #2, I certainly agree that the scavenging code
is very convoluted. Remember that in gen1, a first fit algorithm is used
for allocation. While objects are being promoted into gen1 freespace in
the copy phase, space that is allocated is remembered by threading a
"scavenge list" together, stashing the next pointer directly in the
object's memory. (This is what thread_scavenge_list is doing, which is
called from allocate_in_older_generation, which in turn is called from
copy_object_simple.) scavenge_phase goes through this list once all of
the top-level objects have been copied, clearing marked and pinned bits
and calling copy_object_simple for any object references that are
contained inside the already copied objects. Of course, this results in
more calls on allocate_in_older_generation, which causes more references
to be stashed in the scavenge list...you get the idea... To make matters
worse, once the entire set of refs has been scavenged, a new scavenge
list can be created by the checks on the finalization queue and the
handle table.

-- David


> -----Original Message-----
> From: Discussion of the Rotor Shared Source CLI
> implementation [mailto:[email protected]] On
> Behalf Of Pedro Felix
> Sent: Tuesday, June 17, 2003 9:05 AM
> To: [email protected]
> Subject: [DOTNET-ROTOR] rotor GC
>
>
> I've two doubts regarding the garbage collection in Rotor.
> I've tried to look in the sources and the in Stutz's book but
> I didn't manage to figure them out.
>
>  1)The first part of the "copy_phase" promotes survivors in
> gen 0 to gen 1 (assuming 2 generations) by calling
> "copy_object_simple". This function copies the objects to gen
> 1 and UPDATES (?) the references. If so, why is it necessary
> the second part of "copy_phase" (calls to
> "get_copied_object" and "GCHeap::Relocate" to perform the
> relocation fix up.
>
>  2)What is the purpose of the scavenger_phase?
>
>
> I thank in advance.
>
> Best regards
> P. Felix
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.