RFR: 8271461: CompileCommand support for hidden class methods

Jie Fu jiefu at openjdk.java.net
Thu Jul 29 08:42:47 UTC 2021


Hi all,

We'd like to improve the CompileCommand to support hidden class methods, which is helpful for debugging and perfmance analysis.

Current implementation of CompileCommand doesn't work for hidden class methods.
For example, if you run with `java -Xcomp -Xbatch -XX:+PrintCompilation`
The following hidden class methods were compiled:

   5317 1573    b  3       java.util.ResourceBundle$$Lambda$1/0x00000008010413c8::run (8 bytes)
   5318 1574    b  4       java.util.ResourceBundle$$Lambda$1/0x00000008010413c8::run (8 bytes)
   6735 1938    b  3       java.util.ResourceBundle$ResourceBundleProviderHelper$$Lambda$2/0x0000000801041e80::run (12 bytes)
   6736 1939    b  4       java.util.ResourceBundle$ResourceBundleProviderHelper$$Lambda$2/0x0000000801041e80::run (12 bytes)
   7060 2029    b  3       java.util.ResourceBundle$ResourceBundleProviderHelper$$Lambda$58/0x800000060::run (8 bytes)
   7061 2030    b  4       java.util.ResourceBundle$ResourceBundleProviderHelper$$Lambda$58/0x800000060::run (8 bytes)
   7688 2153    b  3       java.util.ResourceBundle$ResourceBundleProviderHelper$$Lambda$4/0x0000000801043218::run (16 bytes)
   7688 2154    b  4       java.util.ResourceBundle$ResourceBundleProviderHelper$$Lambda$4/0x0000000801043218::run (16 bytes)


Then people may want to exclude the compilation of `java.util.ResourceBundle$$Lambda$1/0x00000008010413c8::run` like this

-XX:CompileCommand=exclude,'java.util.ResourceBundle$$Lambda$1/0x00000008010413c8::run'


But unfortunately, it doesn't work.

CompileCommand: An error occurred during parsing
Error: Method pattern uses '/' together with '::'
Line: 'exclude,java.util.ResourceBundle$$Lambda$1/0x00000008010413c8::run'

Usage: '-XX:CompileCommand=<option>,<method pattern>' - to set boolean option to true
Usage: '-XX:CompileCommand=<option>,<method pattern>,<value>'
Use:   '-XX:CompileCommand=help' for more information and to list all option.


The failing reason is that the name of `java.util.ResourceBundle$$Lambda$1/0x00000008010413c8::run` is actually `java.util.ResourceBundle$$Lambda$1+0x00000008010413c8::run` in the VM.
But "+" had been replaced with "/" when it was printed by PrintCompilation [1].

So for a hidden class method, "/" should be replaced with "+" to make CompileCommand work.

Thanks.
Best regards,
Jie


[1] https://github.com/openjdk/jdk/blob/master/src/hotspot/share/oops/klass.cpp#L685

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

Commit messages:
 - Add jtreg test
 - Fix macOS build warning
 - 8271461: CompileCommand support for hidden class methods

Changes: https://git.openjdk.java.net/jdk/pull/4926/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=4926&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8271461
  Stats: 71 lines in 2 files changed: 69 ins; 0 del; 2 mod
  Patch: https://git.openjdk.java.net/jdk/pull/4926.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/4926/head:pull/4926

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


More information about the hotspot-compiler-dev mailing list