Hi Mariano, I don't understand your question(s)... If you have some code, that would probably help.
Cheers, Adrian On Dec 9, 2009, at 21:06 , Mariano Martinez Peck wrote: > On Wed, Dec 9, 2009 at 9:40 AM, Adrian Lienhard <[email protected]> > wrote: > >> I don't have the VMMaker code at hand right now (or rather, don't >> have >> time to look at it ;)), but I guess that after that piece of code you >> pasted below there is a loop from the first field (BaseHeader+4) to >> the last non-weak field (lastFieldOffset) in which the non-weak >> fields >> are traced. Note, that if an object both fixed and indexable weak >> fields the latter are always located after the former. You can see >> the >> memory layout and object formats on the pages 9 and 10 of the slides >> [1] (from a lecture about VMs I gave recently). >> >> > Thanks for the explanation Adrian and the link Adrian...now, being a > bit > off-topic, I have the following situation about ImageSegment. I > tried to > reproduce it in a unit test, but I couldn't yet :( > > Suppose I create a segment with a tree of objects. Suppose inside of > that > tree I have an object that refers to an external object called XXX, > thus it > is put in the outPointers. > Then I extract the segment, I write it to disk, and I put a nil to the > segment variable. > After that, for some reason, my object XXX is garbage collected from > my > image. > Then I want to load again my segment (reading the file and > installling it). > What happens ? it fails? If true, suppose I have already "installed" > some > other objects, what happen with those objects? is this atomic ? > > Thanks a lot for anyone that can give me a hint. > > Mariano > > > >> Cheers, >> Adrian >> >> [1] http://www.adrian-lienhard.ch/presentations >> >> On Dec 8, 2009, at 22:57 , Mariano Martinez Peck wrote: >> >>> On Tue, Dec 8, 2009 at 10:54 PM, Mariano Martinez Peck < >>> [email protected]> wrote: >>> >>>> >>>> >>>> On Tue, Dec 8, 2009 at 5:07 PM, Adrian Lienhard <[email protected]> >>>> wrote: >>>> >>>>> >>>>> On Dec 8, 2009, at 12:08 , Mariano Martinez Peck wrote: >>>>> >>>>>> On Fri, Dec 4, 2009 at 12:05 PM, Adrian Lienhard >>>>>> <[email protected]> >>>>>> wrote: >>>>> >>>>>> When you are creating your root of objects and you put symbols >>>>>> inside, they >>>>>> are not put in ourPointers but in ByteArray. >>>>>> This is due to the fact that the only object who is pointing to >>>>>> that >>>>>> symbol >>>>>> is inside the segment ? >>>>> >>>>> To be precise, the symbols are also pointed to by the symbol >>>>> table, >>>>> but only by weak references. Since image segments use the GC mark >>>>> logic, these pointers are not considered. >>>>> >>>> >>>> Ahhh ok. Now I see Symbol class >> rehash where it sets to >>>> SymbolTable >>>> := WeakSet >>>> >>>> Now...my finally question is, where in the code you can see the GC >>>> only >>>> mark "normal" objects and that week objects are not being taken >>>> into >>>> account. Do you know ? I tried to search it but I didn't find it. >>>> >>>> >>> Sorry, I forgot to said I found this in ObjectMemory >> >>> markAndTrace: >>> >>> (self isWeakNonInt: oop) ifTrue: [ >>> "Set lastFieldOffset before the weak fields in the receiver" >>> lastFieldOffset := (self nonWeakFieldsOf: oop) << >>> ShiftForWord. >>> "And remember as weak root" >>> weakRootCount := weakRootCount + 1. >>> weakRoots at: weakRootCount put: oop. >>> ] ifFalse: [ >>> "Do it the usual way" >>> lastFieldOffset := self lastPointerOf: oop. >>> ]. >>> >>> >>> But I don't know if this make sense or not. >>> >>> Thanks!! >>> >>> Mariano >>> >>> >>>>>> What you do with this piece of code: >>>>>> >>>>>> symbolHolder := Symbol allSymbols. >>>>>> >>>>>> is to hold those symbols there. So, when ImageSegment uses the GC >>>>>> techniques >>>>>> to detect which objects are ONLY pointed from inside of the >>>>>> segment, >>>>>> the >>>>>> symbols is not found (because it is accessible trough that test) >>>>>> and >>>>>> thus, >>>>>> it goes to outPointers instead of ByteArray. >>>>>> >>>>>> And of course, if it is in outPointers instead of ByteArray when >>>>>> the >>>>>> segment >>>>>> is loaded again, yo don't create a symbol again but use the same >>>>>> object (the >>>>>> one of the oop). >>>>>> >>>>>> I am correct? or I understood anything ? >>>>> >>>>> yes. >>>>> >>>>> Cheers, >>>>> Adrian >>>>> >>>>> _______________________________________________ >>>>> Pharo-project mailing list >>>>> [email protected] >>>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo- >>>>> project >>>>> >>>> >>>> >>> _______________________________________________ >>> Pharo-project mailing list >>> [email protected] >>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> >> >> _______________________________________________ >> Pharo-project mailing list >> [email protected] >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> > _______________________________________________ > Pharo-project mailing list > [email protected] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project _______________________________________________ Pharo-project mailing list [email protected] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
