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

Reply via email to