RFR: 8271461: CompileCommand support for hidden class methods [v4]

Jie Fu jiefu at openjdk.java.net
Tue Aug 3 08:22:13 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

Jie Fu has updated the pull request incrementally with one additional commit since the last revision:

  More strict hidden class name replacement

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/4926/files
  - new: https://git.openjdk.java.net/jdk/pull/4926/files/0e4d1490..8af15718

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=4926&range=03
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=4926&range=02-03

  Stats: 65 lines in 2 files changed: 57 ins; 3 del; 5 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