Etienne Gagnon wrote:
OK. My latest proposal (a few messages ago) was assuming that the nursery was empty when the "end of epoch collection" is launched.If it is not, you can do 2 things: a) do a minor collection to empty it, or b) i - use a finalization-like list of references to class loader objects ii - launch gc, which might mark a previously unmarked vtable iii- do a finalization-like rescuing for resuscitated class loaders "b)" should really have a minimal performance impact. As for its "apparent complexity", I would say that this is a non-issue; similar code must already exist in drlvm for implementing finalization.Just for clarification: "b)" implies a combined "nursery + mature space" collection. Actually, for the mature space part, you could get away with a smaller collection if you premature all class loaders and classes to a specific mature space area; the you only need to collect that space (in addition to the nursery). Etienne
This sounds rather 'stop the world' - while the barrier is more complicated I think it scales to concurrent collectors.
Also, don't forget an instance of a class in the nursery can pass a reference to its classloader to a mature-space object under suitably bizarre circumstances. I guess you could have a write barrier on the class metadata space ...
... an XOR barrier could actually be an interesting solution ... but I'm sure it won't be necessary.
-- Robin Garner Dept. of Computer Science Australian National University http://cs.anu.edu.au/people/Robin.Garner/
