On Sun, 4 Aug 2024 16:09:08 GMT, Shaojin Wen <d...@openjdk.org> wrote:
>> This PR implements the same algorithm as the current generateMHInlineCopy >> based on bytecode to improve startup performance. > > Shaojin Wen has updated the pull request incrementally with 11 additional > commits since the last revision: > > - 1. split length & coder & prepend method > 2. fix comment > 3. change forceInlineThreshold to 16 > 4. 1 arg use built-in method > 5. add tests > - Extract an erasedArgs method > - Remove unnecessary operations > - copyright > - typo > - bug fix and make clean > - Code structuring to reduce the size of generated code > - forceinline > - use prepend and split lengthcoder > - Revert "use static method, remove ConcatBase & MethodHandlePair & > CONSTRUCTOR_BUILDER" > > This reverts commit 03d0c3e6d638a94b29000da510e3b69abdbbe240. > - ... and 1 more: https://git.openjdk.org/jdk/compare/a3cd822e...937f4117 [StringConcat13.txt](https://github.com/user-attachments/files/16488239/StringConcat13.txt) The version of 937f4117162efc869d6dd0a2ff7465fb2071895c has achieved the same performance as the version using MethodHandle, and is significantly ahead in startup performance. Below are the performance numbers on the MacBook M1 Pro # prepend last version git chekcout 937f4117162efc869d6dd0a2ff7465fb2071895c # baseline make test TEST="micro:java.lang.StringConcat" MICRO="VM_OPTIONS=-Djava.lang.invoke.StringConcat.highArityThreshold=20" # bytecode make test TEST="micro:java.lang.StringConcat" MICRO="VM_OPTIONS=-Djava.lang.invoke.StringConcat.highArityThreshold=0" | | baseline | bytecode | delta | | --- | --- | --- | --- | | StringConcat.concat123String | 1226.402 | 1064.982 | 15.16% | | StringConcat.concat13String | 45.690 | 44.908 | 1.74% | | StringConcat.concat13StringConst | 71.923 | 65.761 | 9.37% | | StringConcat.concat23String | 136.207 | 136.542 | -0.25% | | StringConcat.concat23StringConst | 115.112 | 115.689 | -0.50% | | StringConcat.concat30Mix | 404.258 | 411.780 | -1.83% | | StringConcat.concat3String | 12.529 | 12.657 | -1.01% | | StringConcat.concat4String | 13.950 | 23.398 | -40.38% | | StringConcat.concat6String | 19.983 | 18.363 | 8.82% | | StringConcat.concatConst2String | 9.783 | 7.974 | 22.69% | | StringConcat.concatConst4String | 14.783 | 22.698 | -34.87% | | StringConcat.concatConst6Object | 51.522 | 47.578 | 8.29% | | StringConcat.concatConst6String | 19.563 | 18.592 | 5.22% | | StringConcat.concatConstBool | 3.432 | 3.435 | -0.09% | | StringConcat.concatConstBoolByte | 6.465 | 6.172 | 4.75% | | StringConcat.concatConstBoolString | 7.234 | 7.846 | -7.80% | | StringConcat.concatConstBoolean | 3.970 | 3.953 | 0.43% | | StringConcat.concatConstBooleanConst | 4.870 | 4.860 | 0.21% | | StringConcat.concatConstBooleanString | 7.429 | 8.589 | -13.51% | | StringConcat.concatConstFloat | 56.911 | 53.658 | 6.06% | | StringConcat.concatConstFloatConst | 54.156 | 53.585 | 1.07% | | StringConcat.concatConstFloatString | 59.664 | 60.519 | -1.41% | | StringConcat.concatConstInt | 6.075 | 6.074 | 0.02% | | StringConcat.concatConstIntConst | 6.880 | 6.436 | 6.90% | | StringConcat.concatConstIntConstInt | 9.748 | 9.955 | -2.08% | | StringConcat.concatConstIntString | 14.359 | 10.480 | 37.01% | | StringConcat.concatConstInteger | 3.997 | 3.981 | 0.40% | | StringConcat.concatConstIntegerConst | 4.763 | 4.750 | 0.27% | | StringConcat.concatConstIntegerString | 6.973 | 7.789 | -10.48% | | StringConcat.concatConstObjectConst | 11.078 | 10.961 | 1.07% | | StringConcat.concatConstString | 4.976 | 4.960 | 0.32% | | StringConcat.concatConstStringConst | 8.101 | 6.161 | 31.49% | | StringConcat.concatConstStringConstInt | 11.896 | 27.647 | -56.97% | | StringConcat.concatEmptyConstInt | 5.604 | 5.667 | -1.11% | | StringConcat.concatEmptyConstString | 2.058 | 2.084 | -1.25% | | StringConcat.concatEmptyLeft | 2.212 | 2.244 | -1.43% | | StringConcat.concatEmptyRight | 2.327 | 2.369 | -1.77% | | StringConcat.concatMethodConstString | 4.969 | 5.030 | -1.21% | | StringConcat.concatMix4String | 81.670 | 75.552 | 8.10% | | StringConcat.concatStringBoolString | 19.159 | 8.492 | 125.61% | | StringConcat.concatStringBooleanString | 9.847 | 8.492 | 15.96% | | StringConcat.concatStringIntString | 18.228 | 15.132 | 20.46% | | StringConcat.concatStringIntegerString | 9.097 | 8.528 | 6.67% | | StringConcatStartup.MixedLarge.run | 321.940 | 152.246 | 111.46% | | StringConcatStartup.MixedSmall.run | 29.818 | 7.609 | 291.88% | | StringConcatStartup.StringLarge.run | 93.671 | 31.292 | 199.34% | | StringConcatStartup.StringSingle.constBool | 3.110 | 0.465 | 568.82% | | StringConcatStartup.StringSingle.constBoolString | 0.231 | 0.744 | -68.95% | | StringConcatStartup.StringSingle.constBoolean | 0.120 | 0.145 | -17.24% | | StringConcatStartup.StringSingle.constBooleanString | 3.549 | 0.996 | 256.33% | | StringConcatStartup.StringSingle.constFloat | 3.800 | 0.601 | 532.28% | | StringConcatStartup.StringSingle.constFloatString | 5.741 | 1.237 | 364.11% | | StringConcatStartup.StringSingle.constInt | 3.004 | 0.465 | 546.02% | | StringConcatStartup.StringSingle.constIntString | 0.146 | 0.119 | 22.69% | | StringConcatStartup.StringSingle.constInteger | 0.121 | 0.143 | -15.38% | | StringConcatStartup.StringSingle.constIntegerString | 3.585 | 0.996 | 259.94% | | StringConcatStartup.StringSingle.constString | 0.116 | 0.141 | -17.73% | | StringConcatStartup.StringThree.stringIntString | 7.000 | 1.552 | 351.03% | | StringConcatStartup.StringThree.stringIntegerString | 6.530 | 1.070 | 510.28% | ------------- PR Comment: https://git.openjdk.org/jdk/pull/20273#issuecomment-2267596390