RFR: 8213445: jcmd VM.symboltable and VM.stringtable -verbose output contains no shared symbols or strings
Ioi Lam
iklam at openjdk.java.net
Thu Apr 14 00:03:09 UTC 2022
On Wed, 13 Apr 2022 21:56:07 GMT, Calvin Cheung <ccheung at openjdk.org> wrote:
> Please review this change which will include shared symbols and strings when using the commands `jcmd VMsymboltable -verbose` and `jcmd VM.stringtable -verbose`, respectively.
>
> This change also prints the shared symbol and shared string tables statistics if the `-verbose` option is not specified.
>
> An example output of shared symbols:
>
>
> 48084:
> VERSION: 1.1
> 25 2: [Ljava/util/jar/Manifest;
> 13 65535: jdk/jfr/Event
> 26 2: [Ljava/lang/AutoCloseable;
> 5 1: 'app'
> 10 1: 'platform'
> 24 65535: jdk/internal/event/Event
> ---------------
> Shared symbols:
> ---------------
> 0 65535:
> 10 65535: toIndex =
> 3 65535: sbc
> 14 65535: package.access
> ...
> ---------------
> Dynamic shared symbols:
> ---------------
> 19 65535: findResourceInPatch
> 71 65535: (Ljava/util/List<Ljdk/internal/module/ModulePatcher$ResourceFinder;>;)V
> 8 65535: overflow
> 49 65535: sun/net/www/protocol/jrt/JavaRuntimeURLConnection
> 24 65535: com/sun/tools/javac/Main
> 29 65535: com/sun/tools/javac/main/Main
>
>
> Note that the `Dynamic shared symbols` section only shows up if the `jcmd` is used on a running process which is using a dynamic archive.
>
> An example output of symbol table statistics:
>
>
> 48494:
> SymbolTable statistics:
> Number of buckets : 32768 = 262144 bytes, each 8
> Number of entries : 6 = 96 bytes, each 16
> Number of literals : 6 = 152 bytes, avg 25.000
> Total footprint : = 262392 bytes
> Average bucket size : 0.000
> Variance of bucket size : 0.000
> Std. dev. of bucket size: 0.014
> Maximum bucket size : 1
> Shared Symbol Table statistics:
> Number of buckets : 10332
> Number of entries : 39893
> Maximum bucket size : 13
> Dynamic Shared Symbol Table statistics:
> Number of buckets : 51
> Number of entries : 42
> Maximum bucket size : 3
>
>
> Note that the `Dynamic Shared Symbol Table statistics` section only shows up if the `jcmd` is used on a running process which is using a dynamic archive.
>
> Passed CI tiers 1 and 2 testing.
LGTM. Just a few small nits.
src/hotspot/share/classfile/symbolTable.cpp line 623:
> 621: }
> 622: if (!_dynamic_shared_table.empty()) {
> 623: st->print_cr("---------------");
I think it's better to prefix the comments with `#`. That way it will be easier to include the string/symbol output into -XX: SharedArchiveConfigFile.
test/hotspot/jtreg/runtime/cds/appcds/jcmd/JCmdTestDynamicDump.java line 33:
> 31: * @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds
> 32: * @modules jdk.jcmd/sun.tools.common:+open
> 33: * @compile ../../../../../../lib/jdk/test/lib/apps/LingeredApp.java
Is this change necessary? It seems unrelated to this PR.
-------------
Marked as reviewed by iklam (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/8234
More information about the hotspot-runtime-dev
mailing list