Alexey Varlamov wrote:
2006/11/9, Robin Garner <[EMAIL PROTECTED]>:
Etienne Gagnon wrote:
> Alexey Varlamov wrote:
>> Sorry if it was already discussed, but I believe this approach also
>> requires marking vtable bit/byte on each object allocation, unitl the
>> "unloading" GC pass is strictly stop-the-world full-heap collection.
>> Robin, did you include this particular overhead too in your
>> measurements?
I didn't include it - having established that it's cheap during GC where
memory bandwidth is at a premium, I kind of took this for granted.
> My proposal already argued that vtable bit/byte/word marking is
> unnecessary for "nursery allocations". You only need to mark the
vtable
> of objects that survive collection and pretenured objects.
I may have missed it, but I only recall you argued that we just need
to collect mature space for the *final unloading* as CL and classes
are unlikely to die young, which I agree. But chances that a live
object of a candidate class appeared in the nursery are higher.
Otherwise I just do not grok how this algorithm can be proven for
correctness.
There is definitely some kind of barrier required here. If no
references to classes belonging to a c/l exist, but references to one of
the j.l.classloaders exist, classloader may get marked for collection.
Objects get created (via reflection, in nursery), references to c/l are
dropped, classloader unloads.
I believe a barrier in one or more of the reflective methods used to
create objects from j.l.class/j.l.c/loader references is probably necessary.
Weak references can only be collected at the end of a reachability epoch
in any case, so I think there may be some stronger guarantees that we
can use, but I'm too sleepy to thing of them right now :)
And this is a persuasive argument. But I can probably find time to
measure it tomorrow if you aren't convinced.
That would be very kindly, thank you.
--
Alexey
--
Robin Garner
Dept. of Computer Science
Australian National University