Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8203343

VM.{metaspace|classloaders|classhierarchy...} jcmd should show invocation targets for Generated{Method|Constructor}AccessorImpl classes

    XMLWordPrintable

    Details

    • Type: Enhancement
    • Status: Resolved
    • Priority: P4
    • Resolution: Fixed
    • Affects Version/s: 11
    • Fix Version/s: 11
    • Component/s: hotspot
    • Labels:
      None
    • Subcomponent:
    • Resolved In Build:
      b19

      Backports

        Description

        To better analyze VMs doing a lot of reflection it would be helpful to see for which method/ctor invocations Generated{Method|Constructor}Accessor classes are actually generated. Right now we only see the generated class names, which is not really helpful.

        I have a local patch which causes "VM.metaspace", "VM.classloaders", "VM.class_hierarchy" to print out the reflection target of generated core reflection accessor classes. Adding the output to other commands is quite easy.

        Example output:

        jcmd my_spring_app VM.class_hierarchy

        <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)
        | | |--jdk.internal.reflect.GeneratedConstructorAccessor16/0x00007f9ee83508e0 (invokes: org/springframework/boot/context/properties/EnableConfigurationPropertiesImportSelector::<init> ()V)
        | | |--jdk.internal.reflect.GeneratedConstructorAccessor15/0x00007f9ee8347d30 (invokes: org/springframework/boot/autoconfigure/condition/OnBeanCondition::<init> ()V)
        | | |--jdk.internal.reflect.DelegatingConstructorAccessorImpl/null
        | | |--jdk.internal.reflect.NativeConstructorAccessorImpl/null
        | | |--jdk.internal.reflect.GeneratedConstructorAccessor22/0x00007f9ee847b3f0 (invokes: com/sun/proxy/$Proxy36::<init> (Ljava/lang/reflect/InvocationHandler;)V)
        | | |--jdk.internal.reflect.GeneratedConstructorAccessor1/0x00007f9f7881d9d0 (invokes: java/lang/management/ManagementPermission::<init> (Ljava/lang/String;)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;)


          Attachments

            Issue Links

              Activity

                People

                Assignee:
                stuefe Thomas Stuefe
                Reporter:
                stuefe Thomas Stuefe
                Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                  Dates

                  Created:
                  Updated:
                  Resolved: