[M3devel] GC question
Darko
darko at darko.org
Tue Jan 15 01:39:23 CET 2008
Yes, I was considering that and other options, I was just hoping to
move the complexity to the compiler, where I thought it might already
be implemented. I have to try keep my code very clean and simple.
On 14/01/2008, at 3:09 PM, Tony Hosking wrote:
>
> On Jan 14, 2008, at 4:28 PM, Darko wrote:
>
>> Yep, I want to replace one object with another. One application is
>> to expand open arrays without searching large data structures for
>> references to replace. Maybe a simpler question is can you increase
>> the size of an allocated object without getting messy?
>
> Not easily.
>
> Old-time Smalltalk systems had an "Object become:" method that you
> could use to reallocate in this way, but a level of indirection was
> used to avoid having to scan the heap. How about using an explicit
> level of indirection of your own? The WeakRef interface may be
> useful to you here too, so that you can discard indirection state
> when there are no other references to the object.
>
>>
>>
>> On 14/01/2008, at 1:17 PM, Tony Hosking wrote:
>>
>>> 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