Weldon, You sort of missed that in the proposal. Current (possibly compressed) vtable pointer at the offset 0 in the object layout will be replaced with (possibly compressed) ManagedObject*. VTable itself is going to become an object allocated in Java heap.
So, no encrease in object size. Pavel. On 10/25/06, Weldon Washburn <[EMAIL PROTECTED]> wrote:
On 10/24/06, Aleksey Ignatenko <[EMAIL PROTECTED]> wrote: > > > *Automatic class unloading approach.* > > "Automatic class unloading" means that j.l.Classloader instance is > unloaded > automatically (w/o additional enumeration tricks or GC dependency) and > after > we detect that some class loader was unloaded we destroy its native > resources. To do that we need to provide two conditions: > > 1. Introduce reference from object to its j.l.Class instance. hmm... I think this means the object header size will increase by sizeof(reference_ptr). In addition to the cons listed below, the added ref ptr can cause cache pollution problems. From old studies adding a ref ptr to object header degraded overall performance about 3%. Maybe it makes sense to add a dummy slot in the existing object header layout to see what the footprint and speed impact will be on modern hardware. 2. Class registry - introduce references from j.l.Classes to its > defining j.l.Classloader and references from j.l.Classloader to > j.l.Classes loaded by it (unloading is to be done for > j.l.Classloaderand corresponding > j.l.Classes at once). > > > > *Introduce reference from object to its j.l.Class instance.* > > DRLVM has definite implementation specifics. Object is described with > native > VTable structure, which has pointers to class and other related data. > VTables can have different sizes according to object class specifics. The > main idea of referencing j.l.Class from object is to make VTable a special > Java object with reference to appropriate j.l.Class instance, but give it > a > regular object view from GC point of view. VTable pointer is located in > object by zero offset and therefore can be simply considered as reference > field. Thus we can implement j.l.Class instance tracing from object via > VTable object. VTable object is considered to be pinned for > simplification. > > > > In summary, having class registry and reference from object to its > j.l.Classinstance we guarantee that some class loader CL can be > unloaded only if > three conditions are fulfilled described above (*). To find out when Java > part of class loader was unloaded j.l.Classloader instance should be > enumerated as weak root. When this root becomes equal to null – destroy > native memory of appropriate class loader. > > > > Pros: > > - Unification of unloading approach – no additional requirements from GC. > > - Stop-the-world is not required. > > - GC handles VTables automatically as regular objects. > > Cons > > - Number of objects to be increased. > > - Memory footprint to be increased both for native and Java heaps (as > VTable > objects appear). > > > > *Conclusion. * > > I prefer automatic class unloading approach due to the described set of > properties (see above). It is more flexible and perspective solution. Also > JVM specification is mostly related to automatic class unloading approach > while mark and scan based approach looks more like class unloading > workaround. > > > > > > Please, do not hesitate to ask questions. > > Best regards, > > Aleksey Ignatenko, > > Intel Enterprise Solutions Software Division. > > -- Weldon Washburn Intel Middleware Products Division
-- Pavel Pervov, Intel Enterprise Solutions Software Division