RFR: 8336856: Optimize String Concat [v11]

Chen Liang liach at openjdk.org
Wed Jul 24 14:41:35 UTC 2024


On Wed, 24 Jul 2024 11:43:45 GMT, Shaojin Wen <duke at 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

I will have a more in-depth review later, and help resolve the access issues with Lookup and SecurityManager.

src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java line 387:

> 385:         try {
> 386:             if (concatType.parameterCount() <= HIGH_ARITY_THRESHOLD) {
> 387:                 mh = generateMHInlineCopy(concatType, constantStrings);

You can consider using `concatType.erase()`

src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java line 1119:

> 1117: 
> 1118:         private static MethodHandle generate(Lookup lookup, MethodType args, String[] constants) throws Exception {
> 1119:             lookup = MethodHandles.Lookup.IMPL_LOOKUP;

I think you can try moving the inline copy generation to java.lang's StringConcatHelper; this way, we don't need to expose stringSize, coder etc. through JavaLangAccess (we may update String impl detail in the future) and just access the generated MethodHandle.

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

PR Review: https://git.openjdk.org/jdk/pull/20273#pullrequestreview-2196930455
PR Review Comment: https://git.openjdk.org/jdk/pull/20273#discussion_r1689931670
PR Review Comment: https://git.openjdk.org/jdk/pull/20273#discussion_r1689935833


More information about the core-libs-dev mailing list