RRF: 8187123: (reflect) Class#getCanonicalName and Class#getSimpleName is a part of performance issue

mandy chung mandy.chung at oracle.com
Wed May 2 23:29:46 UTC 2018


On 4/30/18 5:49 AM, Claes Redestad wrote:
> Hi,
>
> please review this patch to enable caching of getCanonicalName and 
> getSimpleName, repeated calls of which has been reported to be a 
> performance
> bottleneck. The caching improves performance of these methods by up to 
> 20x.
>
> Rather than adding new fields to Class itself, which would have 
> footprint implications on classes, we can piggy-back on 
> Class$ReflectionData object.
>
> Webrev: http://cr.openjdk.java.net/~redestad/8187123/open.02/
> Bug: https://bugs.openjdk.java.net/browse/JDK-8187123
>

It's a fine idea to leverage ReflectionData to cache the names.  Can you 
update line 2916 for this change?  For example, reflection data caches 
the names and members.  It will get invalidated when JVM TI 
RedefineClasses is called.

newReflectionData could be updated to copy the simpleName and 
canonicalName from oldReflectionData.  The perf isn't a concern when the 
class is being redefined.  As the class name is unchanged, it might be 
good to copy the names from older reflection data.

Mandy





More information about the core-libs-dev mailing list