RFR: 8044107 Add Diagnostic Command to list all ClassLoaders

Remi Forax forax at univ-mlv.fr
Wed May 28 20:26:40 UTC 2014


On 05/28/2014 09:51 PM, Coleen Phillimore wrote:
>
> On 5/28/14, 3:49 PM, Christian Thalinger wrote:
>> On May 28, 2014, at 12:46 PM, Staffan Larsen 
>> <staffan.larsen at oracle.com> wrote:
>>
>>> On 28 maj 2014, at 21:39, Christian Thalinger 
>>> <christian.thalinger at oracle.com> wrote:
>>>
>>>> On May 28, 2014, at 7:50 AM, Staffan Larsen 
>>>> <staffan.larsen at oracle.com> wrote:
>>>>
>>>>> This change adds a new Diagnostic Command to list all ClassLoaders 
>>>>> and some statistics for each classloader. The command is called 
>>>>> “GC.classloader_stats” and the information listed is:
>>>>>
>>>>> * An id for the ClassLoader. This is the pointer to the Klass of 
>>>>> the ClassLoader. The reason for using the Klass* (instead of the 
>>>>> oop) is that it is stable across invocations.
>>>>> * The id of the ClassLoader’s parent ClassLoader.
>>>>> * The pointer to the ClassLoaderData structure in the VM. This can 
>>>>> be useful for debugging.
>>>>> * The number of classes loaded by the ClassLoader.
>>>>> * The total size of all allocated metaspace chunks for the 
>>>>> ClassLoader.
>>>>> * The total size of all allocated metaspace blocks for the 
>>>>> ClassLoader.
>>>>>
>>>>> If there are anonymous classes (invokedynamic classes) attributed 
>>>>> to the ClassLoader, the following additional information is listed:
>>>>> * The number of anonymous classes loaded by the ClassLoader.
>>>>> * The total size of all allocated metaspace chunks for anonymous 
>>>>> classes in the ClassLoader.
>>>>> * The total size of all allocated metaspace blocks for anonymous 
>>>>> classes in the ClassLoader.
>>>>>
>>>>> The information is gathered during a safe point to guarantee that 
>>>>> the data structures are consistent.
>>>>>
>>>>> I have added a small test and have run this through jprt. A CCC 
>>>>> request has been filed.
>>>>>
>>>>> webrev: http://cr.openjdk.java.net/~sla/8044107/webrev.00/
>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8044107
>>>>>
>>>>> Example output:
>>>>>
>>>>> ClassLoader         Parent              CLData* Classes   
>>>>> ChunkSz   BlockSz Type
>>>>> 0x00000007c002d908  0x0000000000000000 0x0000000000000000       
>>>>> 0         0         0 sun.misc.Launcher$ExtClassLoader
>>>>> 0x0000000000000000  0x0000000000000000 0x00007fb239c08de0     
>>>>> 761   4694016   4241312 <boot classloader>
>>>>> 37     75776     50928   + invokedynamic classes
>>>> You shouldn’t name these “invokedynamic classes”; they can be used 
>>>> for different purposes. “anonymous classes” is the correct name.
>>> Hmm, yeah. Not a good name, I know. The problem with “anonymous 
>>> classes” is that for a Java developer, that term is already taken 
>>> and means something completely different. This is very unfortunate 
>>> and creates a lot of confusion. My first version called them 
>>> “lambdas”, but that was even more wrong. Better names are welcome!
>> These classes are defined via:
>>
>>      public native Class<?> defineAnonymousClass(Class<?> hostClass, 
>> byte[] data, Object[] cpPatches);
>>
>> so this is what they are called.  Sorry :-)
>
> It's still a bad name.  I call them jsr292-anonymous classes. maybe 
> "unsafe anonymous classes" ?
>
> Coleen

John Rose has coined the name 'anonymous klasses' which is not that bad.

Rémi

>>
>>> /Staffan
>>>
>>>>> 0x00000007c0061028 0x00000007c0036878  0x00007fb239c2de60       1 
>>>>> 6144      1976 ClassLoaderStatsTest$DummyClassLoader
>>>>> 1      2048      1288   + invokedynamic classes
>>>>> 0x00000007c0036878  0x00000007c002d908 0x00007fb239e10fc0       
>>>>> 8     88064     31544 sun.misc.Launcher$AppClassLoader
>>>>> Total = 4 808   4866048   4327048
>>>>> ChunkSz: Total size of all allocated metaspace chunks
>>>>> BlockSz: Total size of all allocated metaspace blocks (each chunk 
>>>>> has several blocks)
>>>>>
>>>>>
>>>>> Thanks,
>>>>> /Staffan
>



More information about the hotspot-dev mailing list