[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Re: RFR: 8275775: Add jcmd VM.classes to print details of all classes [v6]
From:       Ioi Lam <iklam () openjdk ! java ! net>
Date:       2022-01-27 16:05:38
Message-ID: r6pEU07Q_5yHU6KXrm2dg4IE_9WBq2eUHvT44AiVT1Y=.04132b01-85c8-419a-bf65-0bacb24244ae () github ! com
[Download RAW message or body]

On Thu, 27 Jan 2022 09:17:09 GMT, Yi Yang <yyang@openjdk.org> wrote:

> > Add VM.classes to print details of all classes, output looks like:
> > 
> > 1. jcmd VM.classes
> > 
> > KlassAddr Size State Flags LoaderName ClassName
> > 0x0000000800c0b400 62 inited W bootstrap \
> > java.lang.invoke.LambdaForm$MH/0x0000000800c0b400 0x0000000800c0b000 62 inited W \
> > bootstrap java.lang.invoke.LambdaForm$DMH/0x0000000800c0b000 0x0000000800c0ac00 \
> >                 62 inited W bootstrap \
> >                 java.lang.invoke.LambdaForm$MH/0x0000000800c0ac00
> > ...
> > 
> > 2. jcmd VM.classes verbose
> > 
> > KlassAddr Size State Flags LoaderName ClassName
> > 0x0000000800c0b400 62 inited W bootstrap \
> > java.lang.invoke.LambdaForm$MH/0x0000000800c0b400 \
> >                 java.lang.invoke.LambdaForm$MH/0x0000000800c0b400 \
> >                 {0x0000000800c0b400}
> > - instance size: 2
> > - klass size: 62
> > - access: final synchronized
> > - state: inited
> > - name: 'java/lang/invoke/LambdaForm$MH+0x0000000800c0b400'
> > - super: 'java/lang/Object'
> > - sub:
> > - arrays: NULL
> > - methods: Array<T>(0x00007f620841f210)
> > - method ordering: Array<T>(0x0000000800a7e5a8)
> > - default_methods: Array<T>(0x0000000000000000)
> > - local interfaces: Array<T>(0x00000008005af748)
> > - trans. interfaces: Array<T>(0x00000008005af748)
> > - constants: constant pool [41] {0x00007f620841f030} for \
> >                 'java/lang/invoke/LambdaForm$MH+0x0000000800c0b400' \
> >                 cache=0x00007f620841f380
> > - class loader data: loader data: 0x00007f61c804a690 of 'bootstrap' has a class \
> >                 holder
> > - source file: 'LambdaForm$MH'
> > - class annotations: Array<T>(0x0000000000000000)
> > - class type annotations: Array<T>(0x0000000000000000)
> > - field annotations: Array<T>(0x0000000000000000)
> > - field type annotations: Array<T>(0x0000000000000000)
> > - inner classes: Array<T>(0x00000008005af6d8)
> > - nest members: Array<T>(0x00000008005af6d8)
> > - permitted subclasses: Array<T>(0x00000008005af6d8)
> > - java mirror: a 'java/lang/Class'{0x000000011f4b3968} = \
> >                 'java/lang/invoke/LambdaForm$MH+0x0000000800c0b400'
> > - vtable length 5 (start addr: 0x0000000800c0b5b8)
> > - itable length 2 (start addr: 0x0000000800c0b5e0)
> > - ---- static fields (1 words):
> > - static final '_D_0' 'Ljava/lang/invoke/LambdaForm;' @112
> > - ---- non-static fields (0 words):
> > - non-static oop maps:
> > 0x0000000800c0b000 62 inited W bootstrap \
> > java.lang.invoke.LambdaForm$DMH/0x0000000800c0b000 \
> >                 java.lang.invoke.LambdaForm$DMH/0x0000000800c0b000 \
> >                 {0x0000000800c0b000}
> > - instance size: 2
> > - klass size: 62
> > - access: final synchronized
> > - state: inited
> > - name: 'java/lang/invoke/LambdaForm$DMH+0x0000000800c0b000'
> > - super: 'java/lang/Object'
> > - sub:
> > - arrays: NULL
> > - methods: Array<T>(0x00007f620841ea68)
> > - method ordering: Array<T>(0x0000000800a7e5a8)
> > - default_methods: Array<T>(0x0000000000000000)
> > - local interfaces: Array<T>(0x00000008005af748)
> > - trans. interfaces: Array<T>(0x00000008005af748)
> > - constants: constant pool [49] {0x00007f620841e838} for \
> >                 'java/lang/invoke/LambdaForm$DMH+0x0000000800c0b000' \
> >                 cache=0x00007f620841ebe0
> > - class loader data: loader data: 0x00007f61c804a750 of 'bootstrap' has a class \
> >                 holder
> > - source file: 'LambdaForm$DMH'
> > - class annotations: Array<T>(0x0000000000000000)
> > - class type annotations: Array<T>(0x0000000000000000)
> > - field annotations: Array<T>(0x0000000000000000)
> > - field type annotations: Array<T>(0x0000000000000000)
> > - inner classes: Array<T>(0x00000008005af6d8)
> > - nest members: Array<T>(0x00000008005af6d8)
> > - permitted subclasses: Array<T>(0x00000008005af6d8)
> > - java mirror: a 'java/lang/Class'{0x000000011f4b0968} = \
> >                 'java/lang/invoke/LambdaForm$DMH+0x0000000800c0b000'
> > - vtable length 5 (start addr: 0x0000000800c0b1b8)
> > - itable length 2 (start addr: 0x0000000800c0b1e0)
> > - ---- static fields (1 words):
> > - static final '_D_0' 'Ljava/lang/invoke/LambdaForm;' @112
> > - ---- non-static fields (0 words):
> > ...
> 
> Yi Yang has updated the pull request incrementally with one additional commit since \
> the last revision: 
> fix

LGTM. One minor nit,

Could you update the PR description to include examples of the final output format.

src/hotspot/share/oops/instanceKlass.cpp line 2081:

> 2079:   _st->print(INTPTR_FORMAT "  ", p2i(k));
> 2080:   // klass size
> 2081:   _st->print("%-4d  ", k->size());

Should be `%4d` so that the numbers are aligned correctly.

-------------

Marked as reviewed by iklam (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/7105


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic