I've introduced class unloading test into harmony-2000 attachments:
Test_unloading_native_lib.zip. This test is drlvm class unloading
implementation specific.

Aleksey.


On 11/3/06, Aleksey Ignatenko <[EMAIL PROTECTED]> wrote:

Weldon,
>I glanced at native_sources_cleanup.patch.  It looks like code for
>alloc/dealloc vtables and jitted code blocks.  The original patch made
>vtables into objects.  Will native_sources_cleanup need to change if
vtables
>are normal C structs instead?  Also, I see reference to path
.../gcv4/...  I
>guess this will need to change to support gc_gen and gc_cc.
Vtables are not affected in native resource cleanup patch (no change from
c struct to object).
GCV4: There is some code cleanup and native resource cleaning in gcv4. The
same will be done for gc_gen and gc_cc by GC people with separate JIRA,
becuse it could affect some performance problems.

I have updated patches to the final versions:
native_sources_cleanup_upd.patch, auto_unloading_upd.patch. So, I suppose
native_sources_cleanup_upd.patch is ready for comit.
Aleksey.



 On 11/2/06, Weldon Washburn <[EMAIL PROTECTED]> wrote:
>
> Aleksey,
>
> Excellent step forward -- breaking the patch into two pieces.   This
> made
> the patch(es) much more readable.
>
> I glanced at native_sources_cleanup.patch.  It looks like code for
> alloc/dealloc vtables and jitted code blocks.  The original patch made
> vtables into objects.  Will native_sources_cleanup need to change if
> vtables
> are normal C structs instead?  Also, I see reference to path
> .../gcv4/...  I
> guess this will need to change to support gc_gen and gc_cc.
>
> Once you get native_sources_cleanup.patch in good shape, I have no
> problem
> committing it.
>
> If there is no other debate on class unloading design, I will call for a
> vote in a seperate email.
>
>
>
> On 11/2/06, Aleksey Ignatenko < [EMAIL PROTECTED]> wrote:
> >
> > Hi, everyone.
> >
> > I've splitted Harmony-2000 (see details:
> > http://issues.apache.org/jira/browse/HARMONY-2000 ) patch with
> automatic
> > class unloading implementation into 2 independent parts:
> > 1. cleaning native resources (native_sources_cleanup.patch).
> > 2. automatic unloading design implementation (auto_unloading.patch).
> >
> > The first part is independent for all class unloading designs and
> could be
> > commited. The second part is class unloading design implementation
> (the
> > best
> > class unloading approach is discussed now).
> >
> > I propose to commit native_sources_cleanup.patch and continue class
> > unloading development with minimal requirements on drlvm.
> >
> > Aleksey.
> >
> >
> > On 11/1/06, Aleksey Ignatenko < [EMAIL PROTECTED]> wrote:
> > >
> > > Oops, sorry, misprinted in my suggestion:
> > >                 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);
> > >                 }
> > >
> > > Aleksey.
> > >
> > >  On 11/1/06, Aleksey Ignatenko <[EMAIL PROTECTED] > wrote:
> > > >
> > > > 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.Classesand
> > > > 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.Classinstance.
> > > > > >> >> 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
> > > > >
> > > >
> > > >
> > >
> >
> >
>
>
> --
> Weldon Washburn
> Intel Enterprise Solutions Software Division
>
>

Reply via email to