RFR: 8352316: More MergeStoreBench

Shaojin Wen swen at openjdk.org
Sat Mar 29 05:21:30 UTC 2025


On Sat, 29 Mar 2025 01:30:01 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:

>> Added performance tests related to String.getBytes/String.getChars/StringBuilder.append/System.arraycopy in constant scenarios to verify whether MergeStore works
>
> Ok, I don't have anything against a fixed string constant. But existing names (`NULL_STR` et al, `putNull`) add confusion IMO (especially, when there's Unsafe in play).

According to @iwanowww's suggestion, I changed the original name of putNull to str4, and added the benchmarks of str5 and str7. The following are the new performance numbers, which show that using ArraySetConst  or UnsafePut has better performance.

# 1. Scipt

git remote add wenshao git at github.com:wenshao/jdk.git
git fetch wenshao
git checkout a5eb3b98ece8cf1aa6eaa3d1287148e1b0510f4b
make test TEST="micro:vm.compiler.MergeStoreBench.str"


# 2. aliyun_ecs_c8a_x64 (CPU AMD EPYC™ Genoa)

Benchmark                               Mode  Cnt      Score      Error  Units
MergeStoreBench.str4ArraySetConst       avgt    5   1343.148 ±    3.995  ns/op
MergeStoreBench.str4Arraycopy           avgt    5   7293.298 ±   35.868  ns/op
MergeStoreBench.str4GetBytes            avgt    5   6175.505 ±   17.465  ns/op
MergeStoreBench.str4GetChars            avgt    5  13954.105 ± 1561.080  ns/op
MergeStoreBench.str4StringBuilder       avgt    5  15633.944 ± 4579.011  ns/op
MergeStoreBench.str4UnsafePut           avgt    5   1325.916 ±    6.126  ns/op
MergeStoreBench.str4Utf16ArrayCopy      avgt    5  13998.302 ±  938.311  ns/op
MergeStoreBench.str4Utf16ArraySetConst  avgt    5   1514.040 ±    6.774  ns/op
MergeStoreBench.str4Utf16StringBuilder  avgt    5  16382.059 ± 4943.649  ns/op
MergeStoreBench.str4Utf16UnsafePut      avgt    5   1616.452 ±    9.472  ns/op
MergeStoreBench.str5ArraySetConst       avgt    5   2609.046 ±   28.409  ns/op
MergeStoreBench.str5Arraycopy           avgt    5   9519.887 ±   54.364  ns/op
MergeStoreBench.str5GetBytes            avgt    5   5987.410 ±   14.277  ns/op
MergeStoreBench.str5GetChars            avgt    5  13598.285 ±  241.078  ns/op
MergeStoreBench.str5StringBuilder       avgt    5  16556.510 ± 2962.211  ns/op
MergeStoreBench.str5UnsafePut           avgt    5   2431.841 ±   24.299  ns/op
MergeStoreBench.str5Utf16ArrayCopy      avgt    5  21433.158 ±  131.466  ns/op
MergeStoreBench.str5Utf16ArraySetConst  avgt    5   2935.785 ±    3.777  ns/op
MergeStoreBench.str5Utf16StringBuilder  avgt    5  18746.936 ± 3680.162  ns/op
MergeStoreBench.str5Utf16UnsafePut      avgt    5   2878.038 ±   10.055  ns/op
MergeStoreBench.str7ArraySetConst       avgt    5   3594.628 ±   24.397  ns/op
MergeStoreBench.str7Arraycopy           avgt    5  12314.423 ±   81.095  ns/op
MergeStoreBench.str7GetBytes            avgt    5   9014.943 ±  222.911  ns/op
MergeStoreBench.str7GetChars            avgt    5  16866.491 ±  178.543  ns/op
MergeStoreBench.str7StringBuilder       avgt    5  25238.440 ± 2757.460  ns/op
MergeStoreBench.str7UnsafePut           avgt    5   3597.008 ±   26.531  ns/op
MergeStoreBench.str7Utf16ArrayCopy      avgt    5  21325.797 ±  111.975  ns/op
MergeStoreBench.str7Utf16ArraySetConst  avgt    5   3934.164 ±   97.003  ns/op
MergeStoreBench.str7Utf16StringBuilder  avgt    5  19315.320 ± 1960.379  ns/op
MergeStoreBench.str7Utf16UnsafePut      avgt    5   4190.362 ±    8.042  ns/op


# 3. aliyun_ecs_c8i_x64 (CPU Intel®Xeon®Emerald Rapids)

Benchmark                               Mode  Cnt      Score      Error  Units
MergeStoreBench.str4ArraySetConst       avgt    5   1558.348 ±    0.959  ns/op
MergeStoreBench.str4Arraycopy           avgt    5   5837.069 ±    3.166  ns/op
MergeStoreBench.str4GetBytes            avgt    5   5875.195 ±   12.562  ns/op
MergeStoreBench.str4GetChars            avgt    5  12679.307 ±   62.069  ns/op
MergeStoreBench.str4StringBuilder       avgt    5  16588.064 ±   75.515  ns/op
MergeStoreBench.str4UnsafePut           avgt    5   1543.947 ±    4.780  ns/op
MergeStoreBench.str4Utf16ArrayCopy      avgt    5  13973.910 ±  329.196  ns/op
MergeStoreBench.str4Utf16ArraySetConst  avgt    5   2591.923 ±    6.758  ns/op
MergeStoreBench.str4Utf16StringBuilder  avgt    5  17719.390 ± 5016.367  ns/op
MergeStoreBench.str4Utf16UnsafePut      avgt    5   2539.849 ±    8.091  ns/op
MergeStoreBench.str5ArraySetConst       avgt    5   3004.459 ±    9.575  ns/op
MergeStoreBench.str5Arraycopy           avgt    5   7153.397 ±   52.069  ns/op
MergeStoreBench.str5GetBytes            avgt    5   5566.344 ±    4.400  ns/op
MergeStoreBench.str5GetChars            avgt    5  14444.069 ±  224.157  ns/op
MergeStoreBench.str5StringBuilder       avgt    5  18371.573 ±  293.271  ns/op
MergeStoreBench.str5UnsafePut           avgt    5   2879.242 ±    9.412  ns/op
MergeStoreBench.str5Utf16ArrayCopy      avgt    5   4548.225 ±   14.172  ns/op
MergeStoreBench.str5Utf16ArraySetConst  avgt    5   3864.536 ±    4.208  ns/op
MergeStoreBench.str5Utf16StringBuilder  avgt    5  20413.600 ± 1513.652  ns/op
MergeStoreBench.str5Utf16UnsafePut      avgt    5   3858.928 ±    2.923  ns/op
MergeStoreBench.str7ArraySetConst       avgt    5   4658.730 ±    4.558  ns/op
MergeStoreBench.str7Arraycopy           avgt    5  12130.150 ±   13.268  ns/op
MergeStoreBench.str7GetBytes            avgt    5  11941.311 ±  201.509  ns/op
MergeStoreBench.str7GetChars            avgt    5  21081.423 ± 1892.526  ns/op
MergeStoreBench.str7StringBuilder       avgt    5  14661.312 ±  768.749  ns/op
MergeStoreBench.str7UnsafePut           avgt    5   4662.649 ±    2.974  ns/op
MergeStoreBench.str7Utf16ArrayCopy      avgt    5   4973.827 ±    2.841  ns/op
MergeStoreBench.str7Utf16ArraySetConst  avgt    5   5407.768 ±   19.989  ns/op
MergeStoreBench.str7Utf16StringBuilder  avgt    5  25378.418 ± 9377.505  ns/op
MergeStoreBench.str7Utf16UnsafePut      avgt    5   5494.466 ±    5.377  ns/op


# 4. aliyun_ecs_c8y_aarch64 (CPU Aliyun Yitian 710)

Benchmark                               Mode  Cnt      Score       Error  Units
MergeStoreBench.str4ArraySetConst       avgt    5   2232.675 ±     0.858  ns/op
MergeStoreBench.str4Arraycopy           avgt    5   8342.762 ±    22.772  ns/op
MergeStoreBench.str4GetBytes            avgt    5   6988.049 ±    11.874  ns/op
MergeStoreBench.str4GetChars            avgt    5  12363.100 ±    30.414  ns/op
MergeStoreBench.str4StringBuilder       avgt    5  21257.805 ±  1371.310  ns/op
MergeStoreBench.str4UnsafePut           avgt    5   2234.198 ±     1.698  ns/op
MergeStoreBench.str4Utf16ArrayCopy      avgt    5  16381.011 ±   102.719  ns/op
MergeStoreBench.str4Utf16ArraySetConst  avgt    5   3109.010 ±     8.955  ns/op
MergeStoreBench.str4Utf16StringBuilder  avgt    5  22010.040 ±   908.358  ns/op
MergeStoreBench.str4Utf16UnsafePut      avgt    5   2868.544 ±    12.469  ns/op
MergeStoreBench.str5ArraySetConst       avgt    5   3780.322 ±     5.041  ns/op
MergeStoreBench.str5Arraycopy           avgt    5  10649.712 ±    39.440  ns/op
MergeStoreBench.str5GetBytes            avgt    5   6612.562 ±     7.260  ns/op
MergeStoreBench.str5GetChars            avgt    5  15521.451 ±   157.817  ns/op
MergeStoreBench.str5StringBuilder       avgt    5  22938.577 ±  1814.071  ns/op
MergeStoreBench.str5UnsafePut           avgt    5   3769.850 ±     0.524  ns/op
MergeStoreBench.str5Utf16ArrayCopy      avgt    5   5832.413 ±     5.256  ns/op
MergeStoreBench.str5Utf16ArraySetConst  avgt    5   4644.579 ±    41.694  ns/op
MergeStoreBench.str5Utf16StringBuilder  avgt    5  26369.411 ±  8050.710  ns/op
MergeStoreBench.str5Utf16UnsafePut      avgt    5   4497.980 ±    42.817  ns/op
MergeStoreBench.str7ArraySetConst       avgt    5   5913.136 ±    12.055  ns/op
MergeStoreBench.str7Arraycopy           avgt    5  14427.669 ±    80.229  ns/op
MergeStoreBench.str7GetBytes            avgt    5  11712.364 ±    13.206  ns/op
MergeStoreBench.str7GetChars            avgt    5  21309.046 ±   519.416  ns/op
MergeStoreBench.str7StringBuilder       avgt    5  18882.777 ±  2659.525  ns/op
MergeStoreBench.str7UnsafePut           avgt    5   5926.995 ±    11.841  ns/op
MergeStoreBench.str7Utf16ArrayCopy      avgt    5   6362.405 ±     5.381  ns/op
MergeStoreBench.str7Utf16ArraySetConst  avgt    5   4339.133 ±     2.066  ns/op
MergeStoreBench.str7Utf16StringBuilder  avgt    5  30761.366 ± 13408.497  ns/op
MergeStoreBench.str7Utf16UnsafePut      avgt    5   6345.575 ±   128.697  ns/op

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

PR Comment: https://git.openjdk.org/jdk/pull/24108#issuecomment-2763108910


More information about the hotspot-compiler-dev mailing list