On Wed, 24 Jul 2024 11:43:45 GMT, Shaojin Wen <d...@openjdk.org> wrote:
>> The current implementation of StringConcat is to mix the coder and length >> into a long. This operation will have some overhead for int/long/boolean >> types. We can separate the calculation of the coder from the calculation of >> the length, which can improve the performance in the scenario of concat >> int/long/boolean. >> >> This idea comes from the suggestion of @l4es in the discussion of PR >> https://github.com/openjdk/jdk/pull/20253#issuecomment-2240412866 > > Shaojin Wen has updated the pull request with a new target base due to a > merge or a rebase. The pull request now contains 32 commits: > > - Merge remote-tracking branch 'upstream/master' into > optim_concat_factory_202407 > - typo > - change comments > - minor refactor > - minor refactor > - reduce change > - copyright > - reduce change > - refactor based on 8335182 > - use Float.toString & Double.toString > - ... and 22 more: https://git.openjdk.org/jdk/compare/05d88de0...6faecfd7 Below are the performance values running on a MacBook M1 Pro, with a significant improvement in startup performance. `StringConcatStartup.StringSingle.run` has a performance regression due to an additional static FLAG. Remove the following code and the performance of this scenario is the same. String generateInlineCopy = VM.getSavedProperty("java.lang.invoke.StringConcat.generateInlineCopy"); GENERATE_INLINE_COPY = generateInlineCopy != null ? "true".equalsIgnoreCase(generateInlineCopy) : true; String generateInlineCopy = VM.getSavedProperty("java.lang.invoke.StringConcat.generateInlineCopy"); GENERATE_INLINE_COPY = generateInlineCopy != null ? "true".equalsIgnoreCase(generateInlineCopy) : true; -# baseline (05d88de05e9b7814ecd5517aacd17f0feafdff3c) -Benchmark (intValue) Mode Cnt Score Error Units -StringConcatStartup.MixedLarge.run N/A ss 10 314.191 ? 8.621 ms/op -StringConcatStartup.MixedSmall.run N/A ss 20 24.906 ? 0.669 ms/op -StringConcatStartup.StringLarge.run N/A ss 10 87.491 ? 3.760 ms/op -StringConcatStartup.StringSingle.run N/A ss 40 0.096 ? 0.002 ms/op +# current e497c954bd2d27334cbfabb7efa6841d0a5d9427 +Benchmark (intValue) Mode Cnt Score Error Units +StringConcatStartup.MixedLarge.run N/A ss 10 102.306 ? 3.709 ms/op +StringConcatStartup.MixedSmall.run N/A ss 20 4.366 ? 0.109 ms/op +StringConcatStartup.StringLarge.run N/A ss 10 44.109 ? 1.600 ms/op +StringConcatStartup.StringSingle.run N/A ss 40 0.126 ? 0.008 ms/op | | baseline | current | delta | | --- | --- | --- | --- | | StringConcatStartup.MixedLarge.run | 314.191 | 102.306 | 207.11% | | StringConcatStartup.MixedSmall.run | 24.906 | 4.366 | 470.45% | | StringConcatStartup.StringLarge.run | 87.491 | 44.109 | 98.35% | | StringConcatStartup.StringSingle.run | 0.096 | 0.126 | -23.81% | ------------- PR Comment: https://git.openjdk.org/jdk/pull/20273#issuecomment-2248148892