[M3devel] GC question

Tony Hosking hosking at cs.purdue.edu
Mon Jan 14 22:17:11 CET 2008


I'm not sure what your purpose here might be.  You shouldn't assume  
anything about an object's precise location since the collector is  
free to move it around.  What are you trying to do?  If you are  
trying to *replace* one object with another and have all references  
to the old object refer to the new object, then, yes, you really need  
to get intimately involved with the GC, since it will need to go  
through the whole heap and redirect those references.  It is doable,  
but messy, and probably requires that all threads in the system be  
stopped while you pull off the switch.  To do it without stopping all  
the threads requires that you do something much smarter (see papers  
on replicating GC...).

On Jan 14, 2008, at 3:53 PM, Mika Nystrom wrote:

> It would have to be able to return an error, no?  If there's
> an ambiguous root pointing to the object...
>
>
> Darko writes:
>> Tony,
>>
>> I imagine you're intimately familiar with the garbage collector
>> implementation. If I wanted to implement a 'reallocate' function that
>> preserved references to an object although the object was  
>> reallocated,
>> ie change all existing references from the old object to the new
>> object, would this be straight forward using the code of the current
>> GC implementation? Is there any existing function that might do
>> something like this already?
>>
>> Thanks,
>> Darko.




More information about the M3devel mailing list