RFR: 8271461: CompileCommand support for hidden class methods

David Holmes dholmes at openjdk.java.net
Thu Jul 29 23:03:32 UTC 2021


On Thu, 29 Jul 2021 07:50:59 GMT, Jie Fu <jiefu at openjdk.org> wrote:

> 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

I don't believe this can actually work as the name of the hidden class may not be the same from run to run. The mangled name is formed from the address of the instanceKlass.

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

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


More information about the hotspot-compiler-dev mailing list