RFR(L): 8064457: Introduce compressed oops mode "disjoint base" and improve compressed heap handling.
john.r.rose at oracle.com
Tue Jan 6 22:57:28 UTC 2015
On Jan 5, 2015, at 8:49 AM, Coleen Phillimore <coleen.phillimore at oracle.com> wrote:
> So one thing I prototyped and really wanted to check in was what we called indirect class pointers. Instead of allocating classes in a fixed class space, we allocate a fixed array of Klass pointers and the objects in the heap point to this. It had a 8% performance degradation in specbb2008 compiler.compiler (iirc, or something like that).
> This solved so many problems though. If you investigated this sort of approach, I'd be very grateful. I haven't had time to go back to figure out why this had this degradation (we thought it was Java vtable accesses).
I too would be grateful to see this approach explored more. If klasses can be indexed by a small compact range of values, we have new degrees of freedom for layout of object headers, and (with address masking on LP64) even object references. Moreover, if klasses are split in this way, we have the freedom to explore split classes ("species"), by allowing several splits to get their own near-klass blocks while sharing a semantic far-klass and/or java.lang.Class object.
As I've mentioned before, I think a good next experiment would be to pick a small parameter N and hoist the first N vtable entries into the near-klass block (fixed sized array entry).
More generally, it would be very interesting to survey (using some sort of injected counters) the access frequencies for the various fields of *Klass, and work towards segregating hot from cold in metadata. A systematic study of access frequency and density would be a worth a PhD or two.
More information about the hotspot-dev