Sorry for the confusion.  We are getting ourselves all tangled up with
subconversations in this thread.  There have been 90+ replies to the
original posting.

No patch containing class unloading will be committed until Harmony has a
design and the design has been implemented.

What is being discussed is a patch that cleans up the malloc/free of C
structs that are currently used for class loading.  I have looked at the
proposed patch.  It looks to have low impact on stability.  It contains no
class unloading code.  Its not urgent to apply this patch.  I will hold off
doing anything until the confusion clears.  It might even be better to open
a new JIRA titled something like, "classloader malloc/free cleanup".  Note
there are currently 12 files attached to HARMONY-2000.

The patch at issue was split out of the original class unloading patch to
isolate independent problems.


On 11/10/06, Geir Magnusson Jr. <[EMAIL PROTECTED]> wrote:

Hang on - we aren't going to consider this patch quite yet, are we?  We
have a very active and fruitful discussion going on regarding alternate
approaches?

geir


Aleksey Ignatenko wrote:
> Weldon, I have attached updated patch to H-2000:
> cleanup_sources_1558_merged.patch.
> Please, see comments.
>
> Aleksey.
>
>
> On 11/10/06, Weldon Washburn <[EMAIL PROTECTED]> wrote:
>>
>> Aleksey,
>> I tried to apply native_sources_cleanup_upd.patch.  svn HEAD has
changed
>> and
>> the patch no longer works.  Part of the problem is that JIRA 1558 has
>> been
>> committed.  In addition to the below issues, I posted comments to
>> JIRA HARMONY-2000.
>>
>>
>> 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
>> >
>>
>>
>>
>> --
>> Weldon Washburn
>> Intel Enterprise Solutions Software Division
>>
>>
>




--
Weldon Washburn
Intel Enterprise Solutions Software Division

Reply via email to