Hi, folks, Class unloading is an optimization Harmony wants to have, and it should be straightforward to implement the class unloading semantics proposed by Java Language Specification. We want to push this a bit further to allow more VM data structures be reclaimed. We call them VM objects w.r.t. App objects, because they are maintained by VM.
They are basically two approaches to unload the classes, one is to encode the VM object similarly as App object with a header, then GC can treat them uniformly (almost); the other approach treats class unloading specially, which reclaims a class loader together with all its associated VM objects. The former approach can reclaim as more as possible VM objects (besides other benefits such as code placement) but requires more GC overhead, while the latter approach can reclaim a class loader related objects all together if they are arranged properly. I think the latter approach is good enough for Harmony to have initially. The uniformed GC approach can be introduced later for memory-constraint system. Do you folks agree? Thanks, xiaofeng == Intel Managed Runtime Division