RFR: 8338930: StringConcatFactory hardCoded string concatenation strategy [v6]
Chen Liang
liach at openjdk.org
Thu Sep 5 23:45:55 UTC 2024
On Thu, 5 Sep 2024 23:22:01 GMT, Shaojin Wen <swen at openjdk.org> wrote:
>> This is a follow-up to PR #20273, which improves performance when the number of parameters exceeds 20.
>>
>> When the number of parameters is large, the possibility of reuse will be lower, so we can use the static concat method and write the length and coder directly into the bytecode to solve the performance regression problem.
>
> Shaojin Wen has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 12 commits:
>
> - Merge remote-tracking branch 'upstream/master' into optim_concat_factory_202408
>
> # Conflicts:
> # src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java
> - reuseThreshold -> cacheThreshold
> - Revert "optimize for CompactStrings is off"
>
> This reverts commit a9fa264afd9fa625ef29357a7ca8559ce9c5fea4.
> - optimize for CompactStrings is off
> - Merge remote-tracking branch 'upstream/master' into optim_concat_factory_202408
>
> # Conflicts:
> # src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java
> - add control flag `reuseThreshold`
> - Revert "Optimize the construction of MethodType and MethodTypeDesc to reduce memory allocation"
>
> This reverts commit 3bed7290f5cb987e86407f698fb0598f19d65628.
> - Optimize the construction of MethodType and MethodTypeDesc to reduce memory allocation
> - revert code style
> - from suggest
> - ... and 2 more: https://git.openjdk.org/jdk/compare/8fb8cd85...5c12e337
src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java line 1288:
> 1286: if (staticConcat) {
> 1287: clb.withSuperclass(CD_Object)
> 1288: .withFlags(ACC_FINAL | ACC_SUPER | ACC_SYNTHETIC);
According to #19517, project lilliput wants utility classes to be declared `abstract` instead of `final` so their pointers won't be encodable in object headers
src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java line 1495:
> 1493: */
> 1494: if (staticConcat) {
> 1495: cb.ldc(coder);
`coder` can only be 0 or 1, so using `loadConstant` to generate `iconst_0` or `iconst_1` is better. Other `ldc` with number can be potentially replaced by `loadConstant` to generate optimized instructions too.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/20675#discussion_r1746314754
PR Review Comment: https://git.openjdk.org/jdk/pull/20675#discussion_r1746315741
More information about the core-libs-dev
mailing list