RFR 6642881: Improve performance of Class.getClassLoader()

Joel Borggrén-Franck joel.franck at oracle.com
Tue Jun 17 04:38:14 UTC 2014


Hi Coleen,

On 16 jun 2014, at 17:42, Coleen Phillimore <coleen.phillimore at oracle.com> wrote:

> Summary: Add classLoader to java/lang/Class instance for fast access
> 
> In order to improve performance of Class.getClassLoader() in a way to allow the compilers to automatically optimize this call, I added the classLoader to the instance of java/lang/Class.  For microbenchmarks, this results in a 98% improvement, which was expected.  For Oracle internal applications, this results in a 10-12% improvement on solaris/sparc.   The increase in size of java/lang/Class can be offset by other changes (removing constant pool lock, or removing signers).
> 
> See bug link https://bugs.openjdk.java.net/browse/JDK-6642881 and associated linked bugs for more details.
> 
> open webrev at http://cr.openjdk.java.net/~coleenp/6642881_hotspot/
> open webrev at http://cr.openjdk.java.net/~coleenp/6642881_jdk/
> 
> There is both hotspot and jdk changes for this change.  The hotspot changes can work without the jdk changes (check for optional field), but not vice-versa.  I'll file another bug (and compatibility request) to remove JVM_GetClassLoader from hotspot.
> 
> Tested with jck lang, vm, api/java_lang tests with/without jdk change, nsk vm.quick.testlist and hotspot jtreg tests, and jprt.
> 

Have you considered hiding the Class.classLoader field from reflection? I’m not sure it is necessary but I’m not to keen on the idea of people poking at this field with Unsafe (which should go away in 9 but …).

Otherwise looks good.

cheers
/Joel


More information about the jdk9-dev mailing list