On Thu, 5 Sep 2024 23:22:01 GMT, Shaojin Wen <s...@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