Weldon,

A question for all involved.  Is it possible to somehow make it appear that
the new objects related to unloading  (VTable, ClassLoader, etc)  are
always
reachable and thus never collected?  I am trying to figure out a way to
make
integration of class unloading independent of correct support inside the GC
and JIT.  This option could be a command line switch or compile time
option.

I agree with Robin:
Simple.  Keep a list or table of these objects as part of the root set.
Enumerate it optionally depending on a command line option.

Details: you can see from Harmony-2000 patch, that this is done for
Bootstrap classes already. If you look at root_set_enum_common.cpp (with the
patch applied) vm_enumerate_static_fields() function, there is line:
               if (cl->IsBootstrap())
               {
                   vm_enumerate_jlc(c);
                   if (c->vtable)
                       vm_enumerate_root_reference((void**)&c->vtObj,
FALSE);
               }
               else
               {
                   vm_enumerate_jlc(c, true/*weak*/);
               }
You can see, that there are strong roots to Bootstrap j.l.Classes and their
VTable objects. So I suppose, that it would be very simple to propogate
strong roots to all other classes (not only Bootstrap), something like:
               if (cl->IsBootstrap() *&&
env->b_VTable_trace_is_not_supported_by_GC*)
               {
                   vm_enumerate_jlc(c);
                   if (c->vtable)
                       vm_enumerate_root_reference((void**)&c->vtObj,
FALSE);
               }
where *b_VTable_trace_is_not_supported_by_GC *is flag which is set according
to used GC. This will force switching off any class unloading support.

Aleksey.

On 11/1/06, Robin Garner <[EMAIL PROTECTED]> wrote:

Weldon Washburn wrote:
> On 10/30/06, Robin Garner <[EMAIL PROTECTED]> wrote:
>>
>> Weldon Washburn wrote:
>> > On 10/27/06, Geir Magnusson Jr. <[EMAIL PROTECTED]> wrote:
>> >>
>> >>
>> >>
>> >> Weldon Washburn wrote:
>> >> > Steve Blackburn was in Portland Oregon today.  I mentioned the
idea
>> of
>> >> > adding a  reference pointer from object to its j.l.Class instance.
>> >> MMTk
>> >> > was
>> >> > not designed with this idea in mind.  It looks like you will need
to
>> >> fix
>> >> > this part of MMTk and maintain it yourself.  Steve did not seem
>> >> thrilled
>> >> at
>> >> > adding this support to MMTk code base.
>>
>> Actually I think the answer may have been a little garbled along the
way
>> here: MMTk is not a memory manager *for* Java, it is simply a memory
>> manager.  We have been careful to eliminate language-specific features
>> in the heap that it manages.  MMTk has been used to manage C# (in the
>> Rotor VM) and was being incorporated into a Haskell runtime until I ran
>> out of time.
>>
>> Therefore, MMTk knows nothing about the concept of class unloading, or
>> java.lang.Class.
>>
>> >> How does MMTk support class unloading then?
>> >
>> >
>> > MMTk has no special support for class unloading.  This may have
>> > something to
>> > do with the entire system being written in Java thus class unloading
>> come
>> > along for free.  If there needs to be a modification to support
special
>> > case
>> > objects in DRLVM, someone will need to fixup MMTk and provide onging
>> > support of this patch in Harmony.  I have zero idea how big this
effort
>> > would be.   It would also be good to hear what the impact will be on
>> GCV5.
>>
>> MMTk implements several algorithms for retaining the reachable objects
>> in a graph and recycling space used by unreachable ones.  It relies on
>> the host VM to provide a set of roots.  It supports several different
>> semantics of 'weak' references, including but not confined to those
>> required by Java.
>>
>> If you can implement class unloading using those (which the current
>> proposal does), then MMTk can help.
>>
>> If you want to put a pointer to the j.l.Class in the object header,
MMTk
>> will not care, as it has no way of knowing.  If you put an additional
>> pointer into the body of every object, then MMTk will see it as just
>> another object to scan.
>>
>> Remember MMTk is a memory manager, not a Java VM!
>>
>>
>> Conversely, supporting some exotic class unloading mechanism in MMTk
>> shouldn't be hard and wouldn't deter me from trying it out.
>
>
>
> Robin, it would be great if you can get MMTk to support this class
> unloading
> effort.  My main concern is the ongoing maintenance of MMTk class
unloading
> support.

I haven't seen any proposal that requires MMTk to be modified, so it's a
moot point at the moment.

> A question for all involved.  Is it possible to somehow make it appear
that
> the new objects related to unloading  (VTable, ClassLoader, etc)  are
> always
> reachable and thus never collected?  I am trying to figure out a way to
> make
> integration of class unloading independent of correct support inside the
GC
> and JIT.  This option could be a command line switch or compile time
> option.

Simple.  Keep a list or table of these objects as part of the root set.
Enumerate it optionally depending on a command line option.

cheers,
Robin

Reply via email to