Thanks, David!
On Mon, Jun 18, 2018 at 8:21 AM, David Holmes <david.hol...@oracle.com> wrote: > Test update looks good! > > Thanks, > David > > > On 14/06/2018 9:30 PM, Thomas Stüfe wrote: >> >> Hi all, >> >> hopefully last changes, with feedback added from Coleen and David. >> >> Only changes in the provided regression test: I run it now with >> -Dsun.reflect.noInflation to make the test independent from the >> reflection inflation threshold. I also corrected the copyright dates. >> >> Delta: >> http://cr.openjdk.java.net/~stuefe/webrevs/8203343-VM.metaspace-show-reflection-invocation-targets/webrev.01-to-02/webrev/ >> Full: >> http://cr.openjdk.java.net/~stuefe/webrevs/8203343-VM.metaspace-show-reflection-invocation-targets/webrev.02/webrev/ >> >> Thank you, >> >> Thomas >> >> >> On Wed, Jun 6, 2018 at 6:05 PM, Thomas Stüfe <thomas.stu...@gmail.com> >> wrote: >>> >>> Dear all, >>> >>> may I please have feedback and if possible reviews for this small >>> addition: >>> >>> CR: https://bugs.openjdk.java.net/browse/JDK-8203343 >>> Webrev: >>> http://cr.openjdk.java.net/~stuefe/webrevs/8203343-VM.metaspace-show-reflection-invocation-targets/webrev.00/webrev/ >>> >>> (Note: this patch goes atop of >>> https://bugs.openjdk.java.net/browse/JDK-8203682, which is currently >>> up for RFR). >>> >>> --- >>> >>> When analyzing situations involving a lot of reflection, one often >>> stares at walls of "GeneratedXXXAccessorXXX" classes. These names are >>> generated and not at all helpful in analyzing the problem (e.g. which >>> component in a server node does this much reflection and hence uses so >>> much metaspace). >>> >>> This patch adds the ability to print out invocation targets >>> additionally to class names if the class is a generated accessor - for >>> now this ability has been added to VM.metaspace, VM.classloaders and >>> VM.class_hierarchy. >>> >>> Example output from "VM.class_hierarchy": >>> >>> <snip> >>> |--jdk.internal.reflect.MagicAccessorImpl/null >>> <snip> >>> | |--jdk.internal.reflect.ConstructorAccessorImpl/null >>> | | >>> |--jdk.internal.reflect.GeneratedConstructorAccessor18/0x00007f9ee8350c10 >>> (invokes: >>> org/springframework/boot/context/properties/ConfigurationPropertiesBindingPostProcessorRegistrar::<init> >>> ()V) >>> | | >>> |--jdk.internal.reflect.GeneratedConstructorAccessor17/0x00007f9ee8349c00 >>> (invokes: >>> org/springframework/boot/context/properties/EnableConfigurationPropertiesImportSelector$ConfigurationPropertiesBeanRegistrar::<init> >>> ()V) >>> <snip> >>> | |--jdk.internal.reflect.MethodAccessorImpl/null >>> | | >>> |--jdk.internal.reflect.GeneratedMethodAccessor23/0x00007f9ec8329b60 >>> (invokes: org/apache/tomcat/util/modeler/AttributeInfo::setIs (Z)V) >>> | | >>> |--jdk.internal.reflect.GeneratedMethodAccessor22/0x00007f9ee831bc70 >>> (invokes: >>> org/springframework/boot/autoconfigure/SpringBootApplication::exclude >>> ()[Ljava/lang/Class;) >>> <snip> >>> >>> See here more examples: >>> >>> "VM.class_hierarchy" >>> >>> http://cr.openjdk.java.net/~stuefe/webrevs/8203343-VM.metaspace-show-reflection-invocation-targets/example-VM.class_hierarchy.txt >>> >>> "VM.classloaders show-classes" >>> >>> http://cr.openjdk.java.net/~stuefe/webrevs/8203343-VM.metaspace-show-reflection-invocation-targets/example-VM.classloaders.txt >>> >>> >>> ---- >>> >>> Note: I am not sure if this is a fit for hotspot-runtime or >>> serviceability. Sorry for crossposting. >>> >>> Thank you, >>> >>> Thomas