RFR: 8271461: CompileCommand support for hidden class methods

David Holmes dholmes at openjdk.java.net
Fri Jul 30 01:46:29 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

In terms of simply expanding the capability of the command parser this seems reasonable - and that is all that the test verifies.

Whether it will actually work in terms of compiling the expected code is not something that is not guaranteed due to the hidden class name not being guaranteed to remain the same, but it may in practice occur enough to be useful.

Thanks,
David

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

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


More information about the hotspot-compiler-dev mailing list