Initial preview: JEP-149 Reduced Class instance size (original) (raw)
David Holmes david.holmes at oracle.com
Thu Apr 5 02:50:59 UTC 2012
- Previous message: hg: jdk8/tl/jdk: 7159130: add java/rmi/transport/pinClientSocketFactory to problem list
- Next message: Initial preview: JEP-149 Reduced Class instance size
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
http://cr.openjdk.java.net/~dholmes/JEP-149/webrev/
This is an early look at a proposed change to reduce the instance size of Java Class objects in the common case that reflection is not used.
In SE 7 a java.lang.Class instance is 104 bytes on 32-bit systems. It consists of the 8-byte object header, 19 declared fields and 5 injected fields (fields added by the VM as-if they were declared in java.lang.Class but which do not appear in the Java source code). There are 10 reference fields associated with reflection caching that can be moved to a helper object with no impact on the VM or serialization protocols. Adding back a reference for the helper, that saves 9 references. Notionally this is 36 bytes on 32-bit but due to 8-byte alignment it only saves 32 bytes. That gives a size of 72 bytes - a reduction of 30%. This initial modification has been prototyped for initial performance measurements.
Note that if reflection is used then the amount of memory used by the Class will increase by 8-bytes - that being the additional object header of the ReflectionHelper instance. So the net gain depends on the ratio of reflection using classes to non-reflection-using classes in an application.
Please note that I've put this out just before I disappear on vacation for 10 days, so if you don't see any responses from me that is why. :)
Thanks, David Holmes
- Previous message: hg: jdk8/tl/jdk: 7159130: add java/rmi/transport/pinClientSocketFactory to problem list
- Next message: Initial preview: JEP-149 Reduced Class instance size
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]