On Mon, 26 Aug 2024 20:51:35 GMT, Shaojin Wen <d...@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 nine commits: > > - 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 > - Update > src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java > > Co-authored-by: ExE Boss <3889017+exe-b...@users.noreply.github.com> > - support staticConcat Below are the performance numbers I ran on a MacBook M1 Pro. The numbers show that when constants are hard-coded, performance is good even without forceinline. The default values of reuseThreshold and inlineThreshold can even be aggressively set to 4. # fetch current version git checkout a9fa264afd9fa625ef29357a7ca8559ce9c5fea4 # default non-args make test TEST="micro:java.lang.StringConcat.concat6String" # reuseThreshold=4 inlineThreshold=4 make test TEST="micro:java.lang.StringConcat.concat6String" MICRO="VM_OPTIONS=-Djava.lang.invoke.StringConcat.reuseThreshold=4 -Djava.lang.invoke.StringConcat.inlineThreshold=4" # reuseThreshold=8 inlineThreshold=4 make test TEST="micro:java.lang.StringConcat.concat6String" MICRO="VM_OPTIONS=-Djava.lang.invoke.StringConcat.reuseThreshold=8 -Djava.lang.invoke.StringConcat.inlineThreshold=4" # default non-args Benchmark (intValue) Mode Cnt Score Error Units StringConcat.concat6String 4711 avgt 15 19.329 ? 0.476 ns/op # reuseThreshold=4 inlineThreshold=4 Benchmark (intValue) Mode Cnt Score Error Units StringConcat.concat6String 4711 avgt 15 19.256 ? 0.296 ns/op # reuseThreshold=8 inlineThreshold=4 Benchmark (intValue) Mode Cnt Score Error Units StringConcat.concat6String 4711 avgt 15 24.714 ? 0.176 ns/op ------------- PR Comment: https://git.openjdk.org/jdk/pull/20675#issuecomment-2311118543