RFR: JDK-8152115 (proxy) Examine performance of dynamic proxy creation
Peter Levart
peter.levart at gmail.com
Fri Apr 8 10:41:01 UTC 2016
Hi,
With Mandy we have prepared the following patch to restore performance
of java.lanf.reflect.Proxy class caching that has regressed with
introduction of additional checks that have to be performed due to modules:
http://cr.openjdk.java.net/~plevart/jdk9-dev/Proxy.caching/webrev.05/
Jigsaw changed caching of proxy classes from ClassLoader+interfaces to
Module+interfaces to accommodate possible future extension of the API
that might take given Module as a parameter. Additional validation of
constraints and derivation of dynamic module to host proxy class was
performed on the fast path, degrading performance. This change restores
the caching back to ClassLoader+interfaces, but also introduces new
caching mechanism that allows simple derivation of other coexisting
caching schemes that can support possible additions to the Proxy API.
The new mechanism also simplifies caching by avoiding the need to
reference ClassLoader and interfaces through WeakReference objects.
Instead it uses a single ConcurrentHashMap per ClassLoader instance
referenced directly from ClassLoader object. The caching API -
ClassLoaderValue - is general enough to be used for other purposes where
caching per ClassLoader is desired. Currently it is encapsulated as a
java.lang.reflect package-private API, but could simply be promoted to a
public API in an internal concealed package if desired.
Performance of Proxy class caching is back to pre-jigsaw state and even
better:
http://cr.openjdk.java.net/~plevart/jdk9-dev/Proxy.caching/ProxyBench.java
@Mandy
I haven't yet removed the superfluous checking and providing access from
dynamic module to the modules/packages of transitive closure of
interfaces implemented by proxy class. I think this should be done in a
separate issue so that this change doesn't change the semantics of
implementation.
Regards, Peter
More information about the core-libs-dev
mailing list