Skip to content

Conversation

XenoAmess
Copy link
Contributor

@XenoAmess XenoAmess commented Apr 19, 2022

some thoughts after watching 8285001: Simplify StringLatin1.regionMatches #8292

        if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) {
            continue;
        }

should be changed to

        if (((u1 == c1) ? CharacterDataLatin1.instance.toLowerCase(c1) : c1) == Character.toLowerCase(u2)) {
            continue;
        }

as:

  1. c1 is LATIN1, so CharacterDataLatin1.instance.toLowerCase seems faster.
  2. because c1 is LATIN1, so if u1 != c1, then c1 is already lowercase, and don't need a lowercase cauculation.

Progress

  • Change must not contain extraneous whitespace
  • Commit message must refer to an issue
  • Change must be properly reviewed

Issue

  • JDK-8285255: refine StringLatin1.regionMatchesCI_UTF16

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.java.net/jdk pull/8308/head:pull/8308
$ git checkout pull/8308

Update a local copy of the PR:
$ git checkout pull/8308
$ git pull https://git.openjdk.java.net/jdk pull/8308/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 8308

View PR using the GUI difftool:
$ git pr show -t 8308

Using diff file

Download this PR as a diff file:
https://git.openjdk.java.net/jdk/pull/8308.diff

@bridgekeeper
Copy link

bridgekeeper bot commented Apr 19, 2022

👋 Welcome back XenoAmess! A progress list of the required criteria for merging this PR into master will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

@openjdk
Copy link

openjdk bot commented Apr 19, 2022

@XenoAmess The following label will be automatically applied to this pull request:

  • core-libs

When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing list. If you would like to change these labels, use the /label pull request command.

@openjdk openjdk bot added the core-libs core-libs-dev@openjdk.org label Apr 19, 2022
@XenoAmess XenoAmess changed the title 9073087: refine StringLatin1.regionMatchesCI_UTF16 8285255: refine StringLatin1.regionMatchesCI_UTF16 Apr 20, 2022
@openjdk openjdk bot added the rfr Pull request is ready for review label Apr 20, 2022
@mlbridge
Copy link

mlbridge bot commented Apr 20, 2022

Webrevs

@RogerRiggs
Copy link
Contributor

Point 1 make sense.
Point 2 adds a branch and branches aren't free.
Can you show some jmh data for these cases?

@XenoAmess
Copy link
Contributor Author

XenoAmess commented Apr 20, 2022

Point 1 make sense. Point 2 adds a branch and branches aren't free. Can you show some jmh data for these cases?

@RogerRiggs

Bad news is I don't know how to make a jmh benchmark for a not-public class...

@RogerRiggs
Copy link
Contributor

The test should be able to use public string classes with selected Latin1 and utf-16 arguments.
The implementation of regionMatches will end up using the corresponding implementations.
The JMH in PR#8292 might be a start.

@XenoAmess
Copy link
Contributor Author

Jmh Result(with = check)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.charAt

Run progress: 0.00% complete, ETA 00:06:00

Fork: 1 of 3

Warmup Iteration 1: 72.769 ns/op

Warmup Iteration 2: 74.375 ns/op

Warmup Iteration 3: 72.471 ns/op

Warmup Iteration 4: 73.477 ns/op

Warmup Iteration 5: 74.972 ns/op

Warmup Iteration 6: 73.593 ns/op

Warmup Iteration 7: 74.270 ns/op

Warmup Iteration 8: 74.981 ns/op

Warmup Iteration 9: 74.273 ns/op

Warmup Iteration 10: 71.556 ns/op

Iteration 1: 73.743 ns/op
Iteration 2: 72.647 ns/op
Iteration 3: 73.701 ns/op
Iteration 4: 74.033 ns/op
Iteration 5: 73.786 ns/op

Run progress: 4.17% complete, ETA 00:05:52

Fork: 2 of 3

Warmup Iteration 1: 75.489 ns/op

Warmup Iteration 2: 73.533 ns/op

Warmup Iteration 3: 72.524 ns/op

Warmup Iteration 4: 73.259 ns/op

Warmup Iteration 5: 73.346 ns/op

Warmup Iteration 6: 72.259 ns/op

Warmup Iteration 7: 73.705 ns/op

Warmup Iteration 8: 71.332 ns/op

Warmup Iteration 9: 70.587 ns/op

Warmup Iteration 10: 69.392 ns/op

Iteration 1: 67.762 ns/op
Iteration 2: 73.029 ns/op
Iteration 3: 69.133 ns/op
Iteration 4: 70.344 ns/op
Iteration 5: 72.041 ns/op

Run progress: 8.33% complete, ETA 00:05:37

Fork: 3 of 3

Warmup Iteration 1: 74.307 ns/op

Warmup Iteration 2: 74.440 ns/op

Warmup Iteration 3: 73.053 ns/op

Warmup Iteration 4: 74.739 ns/op

Warmup Iteration 5: 75.348 ns/op

Warmup Iteration 6: 72.801 ns/op

Warmup Iteration 7: 73.524 ns/op

Warmup Iteration 8: 73.278 ns/op

Warmup Iteration 9: 74.633 ns/op

Warmup Iteration 10: 73.481 ns/op

Iteration 1: 73.787 ns/op
Iteration 2: 73.809 ns/op
Iteration 3: 74.020 ns/op
Iteration 4: 73.751 ns/op
Iteration 5: 73.674 ns/op

Result "org.openjdk.bench.java.lang.StringOther.charAt":
72.617 ±(99.9%) 2.106 ns/op [Average]
(min, avg, max) = (67.762, 72.617, 74.033), stdev = 1.970
CI (99.9%): [70.511, 74.724] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.compareTo

Run progress: 12.50% complete, ETA 00:05:21

Fork: 1 of 3

Warmup Iteration 1: 7.600 ns/op

Warmup Iteration 2: 7.552 ns/op

Warmup Iteration 3: 7.001 ns/op

Warmup Iteration 4: 7.529 ns/op

Warmup Iteration 5: 7.541 ns/op

Warmup Iteration 6: 7.531 ns/op

Warmup Iteration 7: 7.524 ns/op

Warmup Iteration 8: 7.507 ns/op

Warmup Iteration 9: 7.506 ns/op

Warmup Iteration 10: 7.184 ns/op

Iteration 1: 7.119 ns/op
Iteration 2: 7.111 ns/op
Iteration 3: 7.125 ns/op
Iteration 4: 7.113 ns/op
Iteration 5: 7.111 ns/op

Run progress: 16.67% complete, ETA 00:05:06

Fork: 2 of 3

Warmup Iteration 1: 7.616 ns/op

Warmup Iteration 2: 7.503 ns/op

Warmup Iteration 3: 7.013 ns/op

Warmup Iteration 4: 7.543 ns/op

Warmup Iteration 5: 7.530 ns/op

Warmup Iteration 6: 7.489 ns/op

Warmup Iteration 7: 7.513 ns/op

Warmup Iteration 8: 7.495 ns/op

Warmup Iteration 9: 7.493 ns/op

Warmup Iteration 10: 7.124 ns/op

Iteration 1: 7.156 ns/op
Iteration 2: 7.119 ns/op
Iteration 3: 7.111 ns/op
Iteration 4: 7.099 ns/op
Iteration 5: 7.171 ns/op

Run progress: 20.83% complete, ETA 00:04:50

Fork: 3 of 3

Warmup Iteration 1: 7.576 ns/op

Warmup Iteration 2: 7.575 ns/op

Warmup Iteration 3: 6.999 ns/op

Warmup Iteration 4: 7.559 ns/op

Warmup Iteration 5: 7.551 ns/op

Warmup Iteration 6: 7.512 ns/op

Warmup Iteration 7: 7.651 ns/op

Warmup Iteration 8: 7.608 ns/op

Warmup Iteration 9: 7.605 ns/op

Warmup Iteration 10: 7.178 ns/op

Iteration 1: 7.121 ns/op
Iteration 2: 7.110 ns/op
Iteration 3: 7.155 ns/op
Iteration 4: 7.157 ns/op
Iteration 5: 7.176 ns/op

Result "org.openjdk.bench.java.lang.StringOther.compareTo":
7.130 ±(99.9%) 0.027 ns/op [Average]
(min, avg, max) = (7.099, 7.130, 7.176), stdev = 0.025
CI (99.9%): [7.103, 7.157] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.internUnique

Run progress: 25.00% complete, ETA 00:04:35

Fork: 1 of 3

Warmup Iteration 1: 690.789 ns/op

Warmup Iteration 2: 695.665 ns/op

Warmup Iteration 3: 684.139 ns/op

Warmup Iteration 4: 910.126 ns/op

Warmup Iteration 5: 1192.552 ns/op

Warmup Iteration 6: 1404.659 ns/op

Warmup Iteration 7: 1592.178 ns/op

Warmup Iteration 8: 1757.206 ns/op

Warmup Iteration 9: 1885.201 ns/op

Warmup Iteration 10: 2027.096 ns/op

Iteration 1: 2138.939 ns/op
Iteration 2: 2266.500 ns/op
Iteration 3: 2385.430 ns/op
Iteration 4: 2484.336 ns/op
Iteration 5: 2606.155 ns/op

Run progress: 29.17% complete, ETA 00:04:20

Fork: 2 of 3

Warmup Iteration 1: 696.620 ns/op

Warmup Iteration 2: 698.178 ns/op

Warmup Iteration 3: 687.792 ns/op

Warmup Iteration 4: 906.615 ns/op

Warmup Iteration 5: 1194.699 ns/op

Warmup Iteration 6: 1420.135 ns/op

Warmup Iteration 7: 1598.611 ns/op

Warmup Iteration 8: 1762.909 ns/op

Warmup Iteration 9: 1911.581 ns/op

Warmup Iteration 10: 2043.476 ns/op

Iteration 1: 2166.752 ns/op
Iteration 2: 2296.340 ns/op
Iteration 3: 2385.133 ns/op
Iteration 4: 2505.501 ns/op
Iteration 5: 2611.215 ns/op

Run progress: 33.33% complete, ETA 00:04:05

Fork: 3 of 3

Warmup Iteration 1: 703.260 ns/op

Warmup Iteration 2: 720.669 ns/op

Warmup Iteration 3: 713.056 ns/op

Warmup Iteration 4: 886.028 ns/op

Warmup Iteration 5: 1181.698 ns/op

Warmup Iteration 6: 1396.434 ns/op

Warmup Iteration 7: 1585.894 ns/op

Warmup Iteration 8: 1751.506 ns/op

Warmup Iteration 9: 1883.964 ns/op

Warmup Iteration 10: 2021.091 ns/op

Iteration 1: 2141.785 ns/op
Iteration 2: 2260.051 ns/op
Iteration 3: 2359.247 ns/op
Iteration 4: 2479.794 ns/op
Iteration 5: 2590.482 ns/op

Result "org.openjdk.bench.java.lang.StringOther.internUnique":
2378.511 ±(99.9%) 176.258 ns/op [Average]
(min, avg, max) = (2138.939, 2378.511, 2611.215), stdev = 164.872
CI (99.9%): [2202.253, 2554.769] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesLatin1

Run progress: 37.50% complete, ETA 00:03:49

Fork: 1 of 3

Warmup Iteration 1: 27.511 ns/op

Warmup Iteration 2: 27.409 ns/op

Warmup Iteration 3: 26.737 ns/op

Warmup Iteration 4: 27.359 ns/op

Warmup Iteration 5: 27.382 ns/op

Warmup Iteration 6: 27.300 ns/op

Warmup Iteration 7: 27.180 ns/op

Warmup Iteration 8: 27.194 ns/op

Warmup Iteration 9: 27.276 ns/op

Warmup Iteration 10: 26.196 ns/op

Iteration 1: 26.219 ns/op
Iteration 2: 26.314 ns/op
Iteration 3: 26.186 ns/op
Iteration 4: 26.504 ns/op
Iteration 5: 26.431 ns/op

Run progress: 41.67% complete, ETA 00:03:34

Fork: 2 of 3

Warmup Iteration 1: 27.082 ns/op

Warmup Iteration 2: 26.591 ns/op

Warmup Iteration 3: 26.323 ns/op

Warmup Iteration 4: 26.773 ns/op

Warmup Iteration 5: 26.742 ns/op

Warmup Iteration 6: 26.632 ns/op

Warmup Iteration 7: 26.820 ns/op

Warmup Iteration 8: 26.771 ns/op

Warmup Iteration 9: 26.907 ns/op

Warmup Iteration 10: 26.011 ns/op

Iteration 1: 25.982 ns/op
Iteration 2: 26.053 ns/op
Iteration 3: 26.188 ns/op
Iteration 4: 25.960 ns/op
Iteration 5: 26.140 ns/op

Run progress: 45.83% complete, ETA 00:03:19

Fork: 3 of 3

Warmup Iteration 1: 27.288 ns/op

Warmup Iteration 2: 27.050 ns/op

Warmup Iteration 3: 26.629 ns/op

Warmup Iteration 4: 26.941 ns/op

Warmup Iteration 5: 26.953 ns/op

Warmup Iteration 6: 26.933 ns/op

Warmup Iteration 7: 26.828 ns/op

Warmup Iteration 8: 26.963 ns/op

Warmup Iteration 9: 26.843 ns/op

Warmup Iteration 10: 26.320 ns/op

Iteration 1: 26.145 ns/op
Iteration 2: 26.107 ns/op
Iteration 3: 26.145 ns/op
Iteration 4: 26.126 ns/op
Iteration 5: 26.218 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesLatin1":
26.181 ±(99.9%) 0.158 ns/op [Average]
(min, avg, max) = (25.960, 26.181, 26.504), stdev = 0.147
CI (99.9%): [26.024, 26.339] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesU1024LL

Run progress: 50.00% complete, ETA 00:03:03

Fork: 1 of 3

Warmup Iteration 1: 383.221 ns/op

Warmup Iteration 2: 384.145 ns/op

Warmup Iteration 3: 186.489 ns/op

Warmup Iteration 4: 385.039 ns/op

Warmup Iteration 5: 385.782 ns/op

Warmup Iteration 6: 383.717 ns/op

Warmup Iteration 7: 386.026 ns/op

Warmup Iteration 8: 383.559 ns/op

Warmup Iteration 9: 386.779 ns/op

Warmup Iteration 10: 186.426 ns/op

Iteration 1: 186.458 ns/op
Iteration 2: 186.303 ns/op
Iteration 3: 187.232 ns/op
Iteration 4: 186.618 ns/op
Iteration 5: 188.988 ns/op

Run progress: 54.17% complete, ETA 00:02:48

Fork: 2 of 3

Warmup Iteration 1: 382.730 ns/op

Warmup Iteration 2: 383.619 ns/op

Warmup Iteration 3: 186.757 ns/op

Warmup Iteration 4: 382.995 ns/op

Warmup Iteration 5: 386.450 ns/op

Warmup Iteration 6: 383.026 ns/op

Warmup Iteration 7: 386.532 ns/op

Warmup Iteration 8: 388.434 ns/op

Warmup Iteration 9: 383.317 ns/op

Warmup Iteration 10: 186.436 ns/op

Iteration 1: 186.552 ns/op
Iteration 2: 187.692 ns/op
Iteration 3: 187.207 ns/op
Iteration 4: 188.653 ns/op
Iteration 5: 188.379 ns/op

Run progress: 58.33% complete, ETA 00:02:33

Fork: 3 of 3

Warmup Iteration 1: 386.772 ns/op

Warmup Iteration 2: 386.801 ns/op

Warmup Iteration 3: 190.100 ns/op

Warmup Iteration 4: 389.759 ns/op

Warmup Iteration 5: 387.729 ns/op

Warmup Iteration 6: 383.583 ns/op

Warmup Iteration 7: 388.694 ns/op

Warmup Iteration 8: 387.119 ns/op

Warmup Iteration 9: 383.802 ns/op

Warmup Iteration 10: 187.168 ns/op

Iteration 1: 186.468 ns/op
Iteration 2: 186.142 ns/op
Iteration 3: 186.300 ns/op
Iteration 4: 187.378 ns/op
Iteration 5: 188.505 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesU1024LL":
187.258 ±(99.9%) 1.038 ns/op [Average]
(min, avg, max) = (186.142, 187.258, 188.988), stdev = 0.971
CI (99.9%): [186.220, 188.297] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesU1024LU

Run progress: 62.50% complete, ETA 00:02:17

Fork: 1 of 3

Warmup Iteration 1: 1808.439 ns/op

Warmup Iteration 2: 1767.006 ns/op

Warmup Iteration 3: 2598.387 ns/op

Warmup Iteration 4: 1766.816 ns/op

Warmup Iteration 5: 1743.078 ns/op

Warmup Iteration 6: 1756.696 ns/op

Warmup Iteration 7: 1756.846 ns/op

Warmup Iteration 8: 1743.495 ns/op

Warmup Iteration 9: 1759.004 ns/op

Warmup Iteration 10: 2583.316 ns/op

Iteration 1: 2578.140 ns/op
Iteration 2: 2586.399 ns/op
Iteration 3: 2595.297 ns/op
Iteration 4: 2577.773 ns/op
Iteration 5: 2590.910 ns/op

Run progress: 66.67% complete, ETA 00:02:02

Fork: 2 of 3

Warmup Iteration 1: 1820.105 ns/op

Warmup Iteration 2: 1761.995 ns/op

Warmup Iteration 3: 2592.068 ns/op

Warmup Iteration 4: 1750.519 ns/op

Warmup Iteration 5: 1759.997 ns/op

Warmup Iteration 6: 1766.899 ns/op

Warmup Iteration 7: 1763.529 ns/op

Warmup Iteration 8: 1766.331 ns/op

Warmup Iteration 9: 1752.448 ns/op

Warmup Iteration 10: 2579.290 ns/op

Iteration 1: 2583.389 ns/op
Iteration 2: 2595.761 ns/op
Iteration 3: 2580.752 ns/op
Iteration 4: 2591.410 ns/op
Iteration 5: 2605.863 ns/op

Run progress: 70.83% complete, ETA 00:01:47

Fork: 3 of 3

Warmup Iteration 1: 1793.036 ns/op

Warmup Iteration 2: 1758.022 ns/op

Warmup Iteration 3: 2592.707 ns/op

Warmup Iteration 4: 1749.634 ns/op

Warmup Iteration 5: 1758.032 ns/op

Warmup Iteration 6: 1748.079 ns/op

Warmup Iteration 7: 1760.812 ns/op

Warmup Iteration 8: 1755.140 ns/op

Warmup Iteration 9: 1748.580 ns/op

Warmup Iteration 10: 2586.600 ns/op

Iteration 1: 2583.574 ns/op
Iteration 2: 2593.630 ns/op
Iteration 3: 2587.690 ns/op
Iteration 4: 2599.723 ns/op
Iteration 5: 2597.187 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesU1024LU":
2589.833 ±(99.9%) 8.823 ns/op [Average]
(min, avg, max) = (2577.773, 2589.833, 2605.863), stdev = 8.253
CI (99.9%): [2581.010, 2598.657] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesU1024UL

Run progress: 75.00% complete, ETA 00:01:31

Fork: 1 of 3

Warmup Iteration 1: 1782.462 ns/op

Warmup Iteration 2: 1752.012 ns/op

Warmup Iteration 3: 2380.621 ns/op

Warmup Iteration 4: 1743.210 ns/op

Warmup Iteration 5: 1744.448 ns/op

Warmup Iteration 6: 1755.656 ns/op

Warmup Iteration 7: 1744.958 ns/op

Warmup Iteration 8: 1747.890 ns/op

Warmup Iteration 9: 1756.824 ns/op

Warmup Iteration 10: 2386.359 ns/op

Iteration 1: 2375.206 ns/op
Iteration 2: 2381.558 ns/op
Iteration 3: 2378.714 ns/op
Iteration 4: 2375.443 ns/op
Iteration 5: 2384.942 ns/op

Run progress: 79.17% complete, ETA 00:01:16

Fork: 2 of 3

Warmup Iteration 1: 1790.976 ns/op

Warmup Iteration 2: 1749.313 ns/op

Warmup Iteration 3: 2373.999 ns/op

Warmup Iteration 4: 1727.657 ns/op

Warmup Iteration 5: 1733.681 ns/op

Warmup Iteration 6: 1745.252 ns/op

Warmup Iteration 7: 1742.418 ns/op

Warmup Iteration 8: 1736.290 ns/op

Warmup Iteration 9: 1743.422 ns/op

Warmup Iteration 10: 2379.393 ns/op

Iteration 1: 2375.139 ns/op
Iteration 2: 2374.890 ns/op
Iteration 3: 2375.229 ns/op
Iteration 4: 2378.850 ns/op
Iteration 5: 2396.568 ns/op

Run progress: 83.33% complete, ETA 00:01:01

Fork: 3 of 3

Warmup Iteration 1: 1790.161 ns/op

Warmup Iteration 2: 1755.700 ns/op

Warmup Iteration 3: 2389.256 ns/op

Warmup Iteration 4: 1734.317 ns/op

Warmup Iteration 5: 1754.969 ns/op

Warmup Iteration 6: 1752.956 ns/op

Warmup Iteration 7: 1743.547 ns/op

Warmup Iteration 8: 1742.636 ns/op

Warmup Iteration 9: 1752.264 ns/op

Warmup Iteration 10: 2371.152 ns/op

Iteration 1: 2382.148 ns/op
Iteration 2: 2378.250 ns/op
Iteration 3: 2372.130 ns/op
Iteration 4: 2380.523 ns/op
Iteration 5: 2385.087 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesU1024UL":
2379.645 ±(99.9%) 6.481 ns/op [Average]
(min, avg, max) = (2372.130, 2379.645, 2396.568), stdev = 6.062
CI (99.9%): [2373.164, 2386.126] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesU1024UU

Run progress: 87.50% complete, ETA 00:00:45

Fork: 1 of 3

Warmup Iteration 1: 385.542 ns/op

Warmup Iteration 2: 402.016 ns/op

Warmup Iteration 3: 188.558 ns/op

Warmup Iteration 4: 391.182 ns/op

Warmup Iteration 5: 404.047 ns/op

Warmup Iteration 6: 391.660 ns/op

Warmup Iteration 7: 387.864 ns/op

Warmup Iteration 8: 401.734 ns/op

Warmup Iteration 9: 390.811 ns/op

Warmup Iteration 10: 193.879 ns/op

Iteration 1: 191.808 ns/op
Iteration 2: 190.770 ns/op
Iteration 3: 187.111 ns/op
Iteration 4: 190.040 ns/op
Iteration 5: 187.351 ns/op

Run progress: 91.67% complete, ETA 00:00:30

Fork: 2 of 3

Warmup Iteration 1: 389.080 ns/op

Warmup Iteration 2: 386.598 ns/op

Warmup Iteration 3: 188.687 ns/op

Warmup Iteration 4: 388.477 ns/op

Warmup Iteration 5: 388.952 ns/op

Warmup Iteration 6: 387.221 ns/op

Warmup Iteration 7: 389.056 ns/op

Warmup Iteration 8: 387.642 ns/op

Warmup Iteration 9: 390.166 ns/op

Warmup Iteration 10: 188.666 ns/op

Iteration 1: 187.776 ns/op
Iteration 2: 213.099 ns/op
Iteration 3: 198.493 ns/op
Iteration 4: 193.155 ns/op
Iteration 5: 190.390 ns/op

Run progress: 95.83% complete, ETA 00:00:15

Fork: 3 of 3

Warmup Iteration 1: 390.556 ns/op

Warmup Iteration 2: 388.024 ns/op

Warmup Iteration 3: 188.315 ns/op

Warmup Iteration 4: 388.357 ns/op

Warmup Iteration 5: 385.902 ns/op

Warmup Iteration 6: 385.977 ns/op

Warmup Iteration 7: 385.849 ns/op

Warmup Iteration 8: 386.678 ns/op

Warmup Iteration 9: 386.514 ns/op

Warmup Iteration 10: 187.926 ns/op

Iteration 1: 189.464 ns/op
Iteration 2: 188.584 ns/op
Iteration 3: 187.770 ns/op
Iteration 4: 188.467 ns/op
Iteration 5: 189.521 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesU1024UU":
191.587 ±(99.9%) 7.069 ns/op [Average]
(min, avg, max) = (187.111, 191.587, 213.099), stdev = 6.612
CI (99.9%): [184.518, 198.655] (assumes normal distribution)

Run complete. Total time: 00:06:07

REMEMBER: The numbers below are just data. To gain reusable insights, you need to follow up on
why the numbers are the way they are. Use profilers (see -prof, -lprof), design factorial
experiments, perform baseline and negative tests that provide experimental control, make sure
the benchmarking environment is safe on JVM/OS/HW level, ask for reviews from the domain experts.
Do not assume the numbers tell you what you want them to tell.

NOTE: Current JVM experimentally supports Compiler Blackholes, and they are in use. Please exercise
extra caution when trusting the results, look into the generated code to check the benchmark still
works, and factor in a small probability of new VM bugs. Additionally, while comparisons between
different JVMs are already problematic, the performance difference caused by different Blackhole
modes can be very significant. Please make sure you use the consistent Blackhole mode for comparisons.

Benchmark Mode Cnt Score Error Units
StringOther.charAt avgt 15 72.617 ± 2.106 ns/op
StringOther.compareTo avgt 15 7.130 ± 0.027 ns/op
StringOther.internUnique avgt 15 2378.511 ± 176.258 ns/op
StringOther.regionMatchesLatin1 avgt 15 26.181 ± 0.158 ns/op
StringOther.regionMatchesU1024LL avgt 15 187.258 ± 1.038 ns/op
StringOther.regionMatchesU1024LU avgt 15 2589.833 ± 8.823 ns/op
StringOther.regionMatchesU1024UL avgt 15 2379.645 ± 6.481 ns/op
StringOther.regionMatchesU1024UU avgt 15 191.587 ± 7.069 ns/op

@XenoAmess
Copy link
Contributor Author

Jmh Result(without = check)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.charAt

Run progress: 0.00% complete, ETA 00:06:00

Fork: 1 of 3

Warmup Iteration 1: 74.478 ns/op

Warmup Iteration 2: 72.357 ns/op

Warmup Iteration 3: 72.555 ns/op

Warmup Iteration 4: 73.901 ns/op

Warmup Iteration 5: 73.573 ns/op

Warmup Iteration 6: 73.771 ns/op

Warmup Iteration 7: 70.427 ns/op

Warmup Iteration 8: 75.018 ns/op

Warmup Iteration 9: 74.755 ns/op

Warmup Iteration 10: 69.792 ns/op

Iteration 1: 72.330 ns/op
Iteration 2: 73.277 ns/op
Iteration 3: 73.678 ns/op
Iteration 4: 68.865 ns/op
Iteration 5: 74.953 ns/op

Run progress: 4.17% complete, ETA 00:05:52

Fork: 2 of 3

Warmup Iteration 1: 74.439 ns/op

Warmup Iteration 2: 73.358 ns/op

Warmup Iteration 3: 71.799 ns/op

Warmup Iteration 4: 70.913 ns/op

Warmup Iteration 5: 71.575 ns/op

Warmup Iteration 6: 69.340 ns/op

Warmup Iteration 7: 69.536 ns/op

Warmup Iteration 8: 69.717 ns/op

Warmup Iteration 9: 70.526 ns/op

Warmup Iteration 10: 74.645 ns/op

Iteration 1: 73.770 ns/op
Iteration 2: 74.756 ns/op
Iteration 3: 73.574 ns/op
Iteration 4: 72.319 ns/op
Iteration 5: 72.092 ns/op

Run progress: 8.33% complete, ETA 00:05:36

Fork: 3 of 3

Warmup Iteration 1: 73.593 ns/op

Warmup Iteration 2: 69.462 ns/op

Warmup Iteration 3: 72.013 ns/op

Warmup Iteration 4: 68.641 ns/op

Warmup Iteration 5: 73.384 ns/op

Warmup Iteration 6: 69.624 ns/op

Warmup Iteration 7: 73.325 ns/op

Warmup Iteration 8: 72.080 ns/op

Warmup Iteration 9: 73.454 ns/op

Warmup Iteration 10: 73.144 ns/op

Iteration 1: 66.782 ns/op
Iteration 2: 73.245 ns/op
Iteration 3: 73.835 ns/op
Iteration 4: 67.903 ns/op
Iteration 5: 72.810 ns/op

Result "org.openjdk.bench.java.lang.StringOther.charAt":
72.279 ±(99.9%) 2.632 ns/op [Average]
(min, avg, max) = (66.782, 72.279, 74.953), stdev = 2.462
CI (99.9%): [69.648, 74.911] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.compareTo

Run progress: 12.50% complete, ETA 00:05:21

Fork: 1 of 3

Warmup Iteration 1: 7.684 ns/op

Warmup Iteration 2: 7.539 ns/op

Warmup Iteration 3: 7.072 ns/op

Warmup Iteration 4: 7.529 ns/op

Warmup Iteration 5: 7.712 ns/op

Warmup Iteration 6: 7.514 ns/op

Warmup Iteration 7: 7.935 ns/op

Warmup Iteration 8: 7.585 ns/op

Warmup Iteration 9: 7.511 ns/op

Warmup Iteration 10: 7.243 ns/op

Iteration 1: 7.202 ns/op
Iteration 2: 7.207 ns/op
Iteration 3: 7.122 ns/op
Iteration 4: 7.140 ns/op
Iteration 5: 7.291 ns/op

Run progress: 16.67% complete, ETA 00:05:06

Fork: 2 of 3

Warmup Iteration 1: 7.665 ns/op

Warmup Iteration 2: 7.611 ns/op

Warmup Iteration 3: 6.974 ns/op

Warmup Iteration 4: 7.627 ns/op

Warmup Iteration 5: 7.605 ns/op

Warmup Iteration 6: 7.526 ns/op

Warmup Iteration 7: 7.535 ns/op

Warmup Iteration 8: 7.581 ns/op

Warmup Iteration 9: 7.624 ns/op

Warmup Iteration 10: 7.116 ns/op

Iteration 1: 7.104 ns/op
Iteration 2: 7.112 ns/op
Iteration 3: 7.163 ns/op
Iteration 4: 7.113 ns/op
Iteration 5: 7.182 ns/op

Run progress: 20.83% complete, ETA 00:04:50

Fork: 3 of 3

Warmup Iteration 1: 7.590 ns/op

Warmup Iteration 2: 7.580 ns/op

Warmup Iteration 3: 7.038 ns/op

Warmup Iteration 4: 7.576 ns/op

Warmup Iteration 5: 7.560 ns/op

Warmup Iteration 6: 7.579 ns/op

Warmup Iteration 7: 7.538 ns/op

Warmup Iteration 8: 7.521 ns/op

Warmup Iteration 9: 7.568 ns/op

Warmup Iteration 10: 7.304 ns/op

Iteration 1: 7.272 ns/op
Iteration 2: 7.244 ns/op
Iteration 3: 7.247 ns/op
Iteration 4: 7.270 ns/op
Iteration 5: 7.335 ns/op

Result "org.openjdk.bench.java.lang.StringOther.compareTo":
7.200 ±(99.9%) 0.079 ns/op [Average]
(min, avg, max) = (7.104, 7.200, 7.335), stdev = 0.074
CI (99.9%): [7.121, 7.279] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.internUnique

Run progress: 25.00% complete, ETA 00:04:35

Fork: 1 of 3

Warmup Iteration 1: 711.210 ns/op

Warmup Iteration 2: 715.546 ns/op

Warmup Iteration 3: 719.641 ns/op

Warmup Iteration 4: 880.842 ns/op

Warmup Iteration 5: 1208.438 ns/op

Warmup Iteration 6: 1412.411 ns/op

Warmup Iteration 7: 1556.071 ns/op

Warmup Iteration 8: 1757.619 ns/op

Warmup Iteration 9: 1870.034 ns/op

Warmup Iteration 10: 2005.351 ns/op

Iteration 1: 2145.538 ns/op
Iteration 2: 2269.473 ns/op
Iteration 3: 2378.031 ns/op
Iteration 4: 2471.040 ns/op
Iteration 5: 2619.508 ns/op

Run progress: 29.17% complete, ETA 00:04:20

Fork: 2 of 3

Warmup Iteration 1: 720.517 ns/op

Warmup Iteration 2: 729.418 ns/op

Warmup Iteration 3: 764.210 ns/op

Warmup Iteration 4: 873.379 ns/op

Warmup Iteration 5: 1168.143 ns/op

Warmup Iteration 6: 1380.917 ns/op

Warmup Iteration 7: 1593.366 ns/op

Warmup Iteration 8: 1736.498 ns/op

Warmup Iteration 9: 1850.467 ns/op

Warmup Iteration 10: 2017.632 ns/op

Iteration 1: 2147.386 ns/op
Iteration 2: 2264.158 ns/op
Iteration 3: 2398.126 ns/op
Iteration 4: 2449.589 ns/op
Iteration 5: 2595.557 ns/op

Run progress: 33.33% complete, ETA 00:04:05

Fork: 3 of 3

Warmup Iteration 1: 704.568 ns/op

Warmup Iteration 2: 719.501 ns/op

Warmup Iteration 3: 727.100 ns/op

Warmup Iteration 4: 890.044 ns/op

Warmup Iteration 5: 1187.037 ns/op

Warmup Iteration 6: 1411.096 ns/op

Warmup Iteration 7: 1581.086 ns/op

Warmup Iteration 8: 1760.902 ns/op

Warmup Iteration 9: 1920.568 ns/op

Warmup Iteration 10: 2043.275 ns/op

Iteration 1: 2154.441 ns/op
Iteration 2: 2269.279 ns/op
Iteration 3: 2388.032 ns/op
Iteration 4: 2499.567 ns/op
Iteration 5: 2616.938 ns/op

Result "org.openjdk.bench.java.lang.StringOther.internUnique":
2377.777 ±(99.9%) 177.415 ns/op [Average]
(min, avg, max) = (2145.538, 2377.777, 2619.508), stdev = 165.954
CI (99.9%): [2200.362, 2555.193] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesLatin1

Run progress: 37.50% complete, ETA 00:03:49

Fork: 1 of 3

Warmup Iteration 1: 27.488 ns/op

Warmup Iteration 2: 26.757 ns/op

Warmup Iteration 3: 26.459 ns/op

Warmup Iteration 4: 27.101 ns/op

Warmup Iteration 5: 26.924 ns/op

Warmup Iteration 6: 27.383 ns/op

Warmup Iteration 7: 27.290 ns/op

Warmup Iteration 8: 26.916 ns/op

Warmup Iteration 9: 26.846 ns/op

Warmup Iteration 10: 26.165 ns/op

Iteration 1: 26.528 ns/op
Iteration 2: 26.675 ns/op
Iteration 3: 26.470 ns/op
Iteration 4: 26.133 ns/op
Iteration 5: 27.045 ns/op

Run progress: 41.67% complete, ETA 00:03:34

Fork: 2 of 3

Warmup Iteration 1: 27.435 ns/op

Warmup Iteration 2: 27.139 ns/op

Warmup Iteration 3: 26.260 ns/op

Warmup Iteration 4: 27.203 ns/op

Warmup Iteration 5: 27.275 ns/op

Warmup Iteration 6: 26.786 ns/op

Warmup Iteration 7: 26.793 ns/op

Warmup Iteration 8: 26.812 ns/op

Warmup Iteration 9: 26.998 ns/op

Warmup Iteration 10: 26.521 ns/op

Iteration 1: 26.258 ns/op
Iteration 2: 26.302 ns/op
Iteration 3: 26.298 ns/op
Iteration 4: 26.283 ns/op
Iteration 5: 26.819 ns/op

Run progress: 45.83% complete, ETA 00:03:19

Fork: 3 of 3

Warmup Iteration 1: 27.275 ns/op

Warmup Iteration 2: 27.129 ns/op

Warmup Iteration 3: 26.404 ns/op

Warmup Iteration 4: 26.708 ns/op

Warmup Iteration 5: 26.969 ns/op

Warmup Iteration 6: 27.077 ns/op

Warmup Iteration 7: 26.732 ns/op

Warmup Iteration 8: 27.090 ns/op

Warmup Iteration 9: 26.974 ns/op

Warmup Iteration 10: 26.679 ns/op

Iteration 1: 26.379 ns/op
Iteration 2: 26.171 ns/op
Iteration 3: 26.151 ns/op
Iteration 4: 26.234 ns/op
Iteration 5: 26.382 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesLatin1":
26.409 ±(99.9%) 0.279 ns/op [Average]
(min, avg, max) = (26.133, 26.409, 27.045), stdev = 0.261
CI (99.9%): [26.129, 26.688] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesU1024LL

Run progress: 50.00% complete, ETA 00:03:03

Fork: 1 of 3

Warmup Iteration 1: 303.144 ns/op

Warmup Iteration 2: 296.744 ns/op

Warmup Iteration 3: 186.968 ns/op

Warmup Iteration 4: 300.451 ns/op

Warmup Iteration 5: 297.590 ns/op

Warmup Iteration 6: 296.346 ns/op

Warmup Iteration 7: 300.523 ns/op

Warmup Iteration 8: 295.685 ns/op

Warmup Iteration 9: 303.034 ns/op

Warmup Iteration 10: 185.710 ns/op

Iteration 1: 185.747 ns/op
Iteration 2: 185.476 ns/op
Iteration 3: 185.970 ns/op
Iteration 4: 186.685 ns/op
Iteration 5: 190.241 ns/op

Run progress: 54.17% complete, ETA 00:02:48

Fork: 2 of 3

Warmup Iteration 1: 306.968 ns/op

Warmup Iteration 2: 300.146 ns/op

Warmup Iteration 3: 189.228 ns/op

Warmup Iteration 4: 297.168 ns/op

Warmup Iteration 5: 296.126 ns/op

Warmup Iteration 6: 295.891 ns/op

Warmup Iteration 7: 295.972 ns/op

Warmup Iteration 8: 295.817 ns/op

Warmup Iteration 9: 300.546 ns/op

Warmup Iteration 10: 186.313 ns/op

Iteration 1: 187.967 ns/op
Iteration 2: 186.222 ns/op
Iteration 3: 185.710 ns/op
Iteration 4: 187.249 ns/op
Iteration 5: 188.887 ns/op

Run progress: 58.33% complete, ETA 00:02:33

Fork: 3 of 3

Warmup Iteration 1: 303.105 ns/op

Warmup Iteration 2: 299.711 ns/op

Warmup Iteration 3: 187.263 ns/op

Warmup Iteration 4: 298.838 ns/op

Warmup Iteration 5: 298.997 ns/op

Warmup Iteration 6: 296.007 ns/op

Warmup Iteration 7: 296.305 ns/op

Warmup Iteration 8: 296.056 ns/op

Warmup Iteration 9: 299.125 ns/op

Warmup Iteration 10: 187.975 ns/op

Iteration 1: 187.091 ns/op
Iteration 2: 189.476 ns/op
Iteration 3: 188.990 ns/op
Iteration 4: 189.501 ns/op
Iteration 5: 190.764 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesU1024LL":
187.732 ±(99.9%) 1.914 ns/op [Average]
(min, avg, max) = (185.476, 187.732, 190.764), stdev = 1.790
CI (99.9%): [185.818, 189.646] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesU1024LU

Run progress: 62.50% complete, ETA 00:02:17

Fork: 1 of 3

Warmup Iteration 1: 1792.067 ns/op

Warmup Iteration 2: 1840.234 ns/op

Warmup Iteration 3: 1536.619 ns/op

Warmup Iteration 4: 1867.624 ns/op

Warmup Iteration 5: 1878.742 ns/op

Warmup Iteration 6: 1835.980 ns/op

Warmup Iteration 7: 1837.200 ns/op

Warmup Iteration 8: 1836.986 ns/op

Warmup Iteration 9: 1838.710 ns/op

Warmup Iteration 10: 1305.558 ns/op

Iteration 1: 1324.687 ns/op
Iteration 2: 1317.813 ns/op
Iteration 3: 1331.293 ns/op
Iteration 4: 1331.446 ns/op
Iteration 5: 1336.226 ns/op

Run progress: 66.67% complete, ETA 00:02:02

Fork: 2 of 3

Warmup Iteration 1: 1792.898 ns/op

Warmup Iteration 2: 1871.357 ns/op

Warmup Iteration 3: 1527.959 ns/op

Warmup Iteration 4: 1859.196 ns/op

Warmup Iteration 5: 1837.751 ns/op

Warmup Iteration 6: 1868.952 ns/op

Warmup Iteration 7: 1838.721 ns/op

Warmup Iteration 8: 1838.604 ns/op

Warmup Iteration 9: 1864.258 ns/op

Warmup Iteration 10: 1322.919 ns/op

Iteration 1: 1325.401 ns/op
Iteration 2: 1316.595 ns/op
Iteration 3: 1316.863 ns/op
Iteration 4: 1314.357 ns/op
Iteration 5: 1332.473 ns/op

Run progress: 70.83% complete, ETA 00:01:47

Fork: 3 of 3

Warmup Iteration 1: 1802.783 ns/op

Warmup Iteration 2: 1864.955 ns/op

Warmup Iteration 3: 1525.647 ns/op

Warmup Iteration 4: 1865.719 ns/op

Warmup Iteration 5: 1855.859 ns/op

Warmup Iteration 6: 1840.375 ns/op

Warmup Iteration 7: 1836.324 ns/op

Warmup Iteration 8: 1840.356 ns/op

Warmup Iteration 9: 1837.068 ns/op

Warmup Iteration 10: 1316.856 ns/op

Iteration 1: 1308.652 ns/op
Iteration 2: 1312.048 ns/op
Iteration 3: 1327.190 ns/op
Iteration 4: 1317.060 ns/op
Iteration 5: 1350.241 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesU1024LU":
1324.156 ±(99.9%) 11.761 ns/op [Average]
(min, avg, max) = (1308.652, 1324.156, 1350.241), stdev = 11.001
CI (99.9%): [1312.396, 1335.917] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesU1024UL

Run progress: 75.00% complete, ETA 00:01:31

Fork: 1 of 3

Warmup Iteration 1: 1876.966 ns/op

Warmup Iteration 2: 1956.101 ns/op

Warmup Iteration 3: 1329.634 ns/op

Warmup Iteration 4: 1960.647 ns/op

Warmup Iteration 5: 1945.769 ns/op

Warmup Iteration 6: 1939.349 ns/op

Warmup Iteration 7: 1962.894 ns/op

Warmup Iteration 8: 1965.710 ns/op

Warmup Iteration 9: 1962.636 ns/op

Warmup Iteration 10: 1303.857 ns/op

Iteration 1: 1325.286 ns/op
Iteration 2: 1315.074 ns/op
Iteration 3: 1311.516 ns/op
Iteration 4: 1380.285 ns/op
Iteration 5: 1374.154 ns/op

Run progress: 79.17% complete, ETA 00:01:16

Fork: 2 of 3

Warmup Iteration 1: 1949.514 ns/op

Warmup Iteration 2: 2007.440 ns/op

Warmup Iteration 3: 1367.116 ns/op

Warmup Iteration 4: 1990.732 ns/op

Warmup Iteration 5: 1958.976 ns/op

Warmup Iteration 6: 1965.754 ns/op

Warmup Iteration 7: 1971.913 ns/op

Warmup Iteration 8: 1974.948 ns/op

Warmup Iteration 9: 1963.292 ns/op

Warmup Iteration 10: 1345.950 ns/op

Iteration 1: 1323.690 ns/op
Iteration 2: 1340.325 ns/op
Iteration 3: 1340.706 ns/op
Iteration 4: 1324.195 ns/op
Iteration 5: 1339.104 ns/op

Run progress: 83.33% complete, ETA 00:01:01

Fork: 3 of 3

Warmup Iteration 1: 1893.688 ns/op

Warmup Iteration 2: 1963.501 ns/op

Warmup Iteration 3: 1332.057 ns/op

Warmup Iteration 4: 1994.072 ns/op

Warmup Iteration 5: 1981.262 ns/op

Warmup Iteration 6: 1978.875 ns/op

Warmup Iteration 7: 1975.539 ns/op

Warmup Iteration 8: 1976.051 ns/op

Warmup Iteration 9: 1965.054 ns/op

Warmup Iteration 10: 1309.543 ns/op

Iteration 1: 1321.755 ns/op
Iteration 2: 1318.766 ns/op
Iteration 3: 1311.904 ns/op
Iteration 4: 1314.272 ns/op
Iteration 5: 1336.825 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesU1024UL":
1331.857 ±(99.9%) 22.509 ns/op [Average]
(min, avg, max) = (1311.516, 1331.857, 1380.285), stdev = 21.055
CI (99.9%): [1309.348, 1354.366] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesU1024UU

Run progress: 87.50% complete, ETA 00:00:45

Fork: 1 of 3

Warmup Iteration 1: 301.524 ns/op

Warmup Iteration 2: 298.614 ns/op

Warmup Iteration 3: 188.084 ns/op

Warmup Iteration 4: 297.548 ns/op

Warmup Iteration 5: 297.762 ns/op

Warmup Iteration 6: 298.255 ns/op

Warmup Iteration 7: 298.128 ns/op

Warmup Iteration 8: 297.294 ns/op

Warmup Iteration 9: 301.427 ns/op

Warmup Iteration 10: 188.916 ns/op

Iteration 1: 187.242 ns/op
Iteration 2: 187.279 ns/op
Iteration 3: 186.889 ns/op
Iteration 4: 187.419 ns/op
Iteration 5: 186.700 ns/op

Run progress: 91.67% complete, ETA 00:00:30

Fork: 2 of 3

Warmup Iteration 1: 309.555 ns/op

Warmup Iteration 2: 299.977 ns/op

Warmup Iteration 3: 190.319 ns/op

Warmup Iteration 4: 300.650 ns/op

Warmup Iteration 5: 300.809 ns/op

Warmup Iteration 6: 304.232 ns/op

Warmup Iteration 7: 303.104 ns/op

Warmup Iteration 8: 298.601 ns/op

Warmup Iteration 9: 304.347 ns/op

Warmup Iteration 10: 190.332 ns/op

Iteration 1: 190.087 ns/op
Iteration 2: 189.434 ns/op
Iteration 3: 187.803 ns/op
Iteration 4: 186.678 ns/op
Iteration 5: 188.202 ns/op

Run progress: 95.83% complete, ETA 00:00:15

Fork: 3 of 3

Warmup Iteration 1: 306.889 ns/op

Warmup Iteration 2: 306.172 ns/op

Warmup Iteration 3: 190.313 ns/op

Warmup Iteration 4: 300.543 ns/op

Warmup Iteration 5: 304.967 ns/op

Warmup Iteration 6: 302.572 ns/op

Warmup Iteration 7: 297.677 ns/op

Warmup Iteration 8: 303.316 ns/op

Warmup Iteration 9: 304.080 ns/op

Warmup Iteration 10: 190.553 ns/op

Iteration 1: 191.023 ns/op
Iteration 2: 192.502 ns/op
Iteration 3: 187.058 ns/op
Iteration 4: 192.817 ns/op
Iteration 5: 191.955 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesU1024UU":
188.872 ±(99.9%) 2.396 ns/op [Average]
(min, avg, max) = (186.678, 188.872, 192.817), stdev = 2.241
CI (99.9%): [186.477, 191.268] (assumes normal distribution)

Run complete. Total time: 00:06:07

REMEMBER: The numbers below are just data. To gain reusable insights, you need to follow up on
why the numbers are the way they are. Use profilers (see -prof, -lprof), design factorial
experiments, perform baseline and negative tests that provide experimental control, make sure
the benchmarking environment is safe on JVM/OS/HW level, ask for reviews from the domain experts.
Do not assume the numbers tell you what you want them to tell.

NOTE: Current JVM experimentally supports Compiler Blackholes, and they are in use. Please exercise
extra caution when trusting the results, look into the generated code to check the benchmark still
works, and factor in a small probability of new VM bugs. Additionally, while comparisons between
different JVMs are already problematic, the performance difference caused by different Blackhole
modes can be very significant. Please make sure you use the consistent Blackhole mode for comparisons.

Benchmark Mode Cnt Score Error Units
StringOther.charAt avgt 15 72.279 ± 2.632 ns/op
StringOther.compareTo avgt 15 7.200 ± 0.079 ns/op
StringOther.internUnique avgt 15 2377.777 ± 177.415 ns/op
StringOther.regionMatchesLatin1 avgt 15 26.409 ± 0.279 ns/op
StringOther.regionMatchesU1024LL avgt 15 187.732 ± 1.914 ns/op
StringOther.regionMatchesU1024LU avgt 15 1324.156 ± 11.761 ns/op
StringOther.regionMatchesU1024UL avgt 15 1331.857 ± 22.509 ns/op
StringOther.regionMatchesU1024UU avgt 15 188.872 ± 2.396 ns/op

@RogerRiggs
Copy link
Contributor

Thanks for the JMH tests and data.

The only part needed from the JMH run is the last 9 lines. The rest is noise.
If it was formatted as a literal it would be easier to read.

What I see is that the run with == is quite a bit slower.

With the == check:

StringOther.regionMatchesU1024LL  avgt   15   187.258 ±   1.038  ns/op
StringOther.regionMatchesU1024LU  avgt   15  2589.833 ±   8.823  ns/op
StringOther.regionMatchesU1024UL  avgt   15  2379.645 ±   6.481  ns/op
StringOther.regionMatchesU1024UU  avgt   15   191.587 ±   7.069  ns/op

Without the == check:

StringOther.regionMatchesU1024LL  avgt   15   187.732 ±   1.914  ns/op
StringOther.regionMatchesU1024LU  avgt   15  1324.156 ±  11.761  ns/op
StringOther.regionMatchesU1024UL  avgt   15  1331.857 ±  22.509  ns/op
StringOther.regionMatchesU1024UU  avgt   15   188.872 ±   2.396  ns/op

In the JMH cases, does the long prefix of latin1 characters distort the timings?

@XenoAmess
Copy link
Contributor Author

XenoAmess commented Apr 20, 2022

@RogerRiggs

What I see is that the run with == is quite a bit slower.

Yes, the result is amazing to me. Before you reply I re-run several times but similar result. So I respect the truth.

In the JMH cases, does the long prefix of latin1 characters distort the timings?

No, the long prefix part is where real difference comes.

So according to jmh result, the = check removed.

@RogerRiggs
Copy link
Contributor

Can you run the JMH against the code before either change (or an existing JDK).
It would be interesting to quantify the improvements of going straight to Latin1.

(Understanding current hardware architectures and their parallelism is hard to understand well.
They do clever things with branch prediction and potentially optimistically executing both paths
and then discarding the non-branch case. The existing code for toLower and toUpper already includes a branch or two; adding one more branch to the sequence likely can't be optimized.)

These interactions at the instruction level is why measuring is important.
Thanks

@XenoAmess
Copy link
Contributor Author

XenoAmess commented Apr 20, 2022

@RogerRiggs

seems all 4 tests related runs very very slightlier slower in original codes, before change it to CharacterDataLatin1.instance

Jmh Result (original)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.charAt

Run progress: 0.00% complete, ETA 00:06:00

Fork: 1 of 3

Warmup Iteration 1: 70.457 ns/op

Warmup Iteration 2: 73.255 ns/op

Warmup Iteration 3: 71.446 ns/op

Warmup Iteration 4: 73.454 ns/op

Warmup Iteration 5: 73.618 ns/op

Warmup Iteration 6: 72.853 ns/op

Warmup Iteration 7: 74.493 ns/op

Warmup Iteration 8: 74.862 ns/op

Warmup Iteration 9: 74.323 ns/op

Warmup Iteration 10: 73.759 ns/op

Iteration 1: 73.053 ns/op
Iteration 2: 70.180 ns/op
Iteration 3: 70.337 ns/op
Iteration 4: 73.237 ns/op
Iteration 5: 73.156 ns/op

Run progress: 4.17% complete, ETA 00:05:52

Fork: 2 of 3

Warmup Iteration 1: 72.617 ns/op

Warmup Iteration 2: 71.344 ns/op

Warmup Iteration 3: 73.582 ns/op

Warmup Iteration 4: 73.309 ns/op

Warmup Iteration 5: 74.078 ns/op

Warmup Iteration 6: 75.177 ns/op

Warmup Iteration 7: 72.578 ns/op

Warmup Iteration 8: 72.028 ns/op

Warmup Iteration 9: 72.897 ns/op

Warmup Iteration 10: 69.317 ns/op

Iteration 1: 69.303 ns/op
Iteration 2: 69.157 ns/op
Iteration 3: 69.078 ns/op
Iteration 4: 69.142 ns/op
Iteration 5: 70.084 ns/op

Run progress: 8.33% complete, ETA 00:05:36

Fork: 3 of 3

Warmup Iteration 1: 72.149 ns/op

Warmup Iteration 2: 73.753 ns/op

Warmup Iteration 3: 70.621 ns/op

Warmup Iteration 4: 74.384 ns/op

Warmup Iteration 5: 71.787 ns/op

Warmup Iteration 6: 74.946 ns/op

Warmup Iteration 7: 74.463 ns/op

Warmup Iteration 8: 73.403 ns/op

Warmup Iteration 9: 71.675 ns/op

Warmup Iteration 10: 72.550 ns/op

Iteration 1: 66.963 ns/op
Iteration 2: 72.209 ns/op
Iteration 3: 71.639 ns/op
Iteration 4: 71.262 ns/op
Iteration 5: 74.514 ns/op

Result "org.openjdk.bench.java.lang.StringOther.charAt":
70.888 ±(99.9%) 2.207 ns/op [Average]
(min, avg, max) = (66.963, 70.888, 74.514), stdev = 2.064
CI (99.9%): [68.681, 73.094] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.compareTo

Run progress: 12.50% complete, ETA 00:05:21

Fork: 1 of 3

Warmup Iteration 1: 7.648 ns/op

Warmup Iteration 2: 7.576 ns/op

Warmup Iteration 3: 7.024 ns/op

Warmup Iteration 4: 7.595 ns/op

Warmup Iteration 5: 7.605 ns/op

Warmup Iteration 6: 7.555 ns/op

Warmup Iteration 7: 7.573 ns/op

Warmup Iteration 8: 7.592 ns/op

Warmup Iteration 9: 7.673 ns/op

Warmup Iteration 10: 7.255 ns/op

Iteration 1: 7.268 ns/op
Iteration 2: 7.183 ns/op
Iteration 3: 7.267 ns/op
Iteration 4: 7.253 ns/op
Iteration 5: 7.248 ns/op

Run progress: 16.67% complete, ETA 00:05:06

Fork: 2 of 3

Warmup Iteration 1: 7.654 ns/op

Warmup Iteration 2: 7.626 ns/op

Warmup Iteration 3: 7.006 ns/op

Warmup Iteration 4: 7.610 ns/op

Warmup Iteration 5: 7.564 ns/op

Warmup Iteration 6: 7.566 ns/op

Warmup Iteration 7: 7.561 ns/op

Warmup Iteration 8: 7.554 ns/op

Warmup Iteration 9: 7.525 ns/op

Warmup Iteration 10: 7.156 ns/op

Iteration 1: 7.137 ns/op
Iteration 2: 7.173 ns/op
Iteration 3: 7.180 ns/op
Iteration 4: 7.168 ns/op
Iteration 5: 7.239 ns/op

Run progress: 20.83% complete, ETA 00:04:50

Fork: 3 of 3

Warmup Iteration 1: 7.595 ns/op

Warmup Iteration 2: 7.556 ns/op

Warmup Iteration 3: 6.966 ns/op

Warmup Iteration 4: 7.513 ns/op

Warmup Iteration 5: 7.546 ns/op

Warmup Iteration 6: 7.415 ns/op

Warmup Iteration 7: 7.449 ns/op

Warmup Iteration 8: 7.557 ns/op

Warmup Iteration 9: 7.485 ns/op

Warmup Iteration 10: 7.210 ns/op

Iteration 1: 7.234 ns/op
Iteration 2: 7.165 ns/op
Iteration 3: 7.194 ns/op
Iteration 4: 7.195 ns/op
Iteration 5: 7.255 ns/op

Result "org.openjdk.bench.java.lang.StringOther.compareTo":
7.210 ±(99.9%) 0.046 ns/op [Average]
(min, avg, max) = (7.137, 7.210, 7.268), stdev = 0.043
CI (99.9%): [7.164, 7.257] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.internUnique

Run progress: 25.00% complete, ETA 00:04:35

Fork: 1 of 3

Warmup Iteration 1: 721.255 ns/op

Warmup Iteration 2: 738.384 ns/op

Warmup Iteration 3: 787.659 ns/op

Warmup Iteration 4: 855.374 ns/op

Warmup Iteration 5: 1162.055 ns/op

Warmup Iteration 6: 1366.581 ns/op

Warmup Iteration 7: 1576.950 ns/op

Warmup Iteration 8: 1707.555 ns/op

Warmup Iteration 9: 1909.602 ns/op

Warmup Iteration 10: 1991.609 ns/op

Iteration 1: 2126.098 ns/op
Iteration 2: 2247.201 ns/op
Iteration 3: 2365.506 ns/op
Iteration 4: 2481.897 ns/op
Iteration 5: 2602.970 ns/op

Run progress: 29.17% complete, ETA 00:04:20

Fork: 2 of 3

Warmup Iteration 1: 732.419 ns/op

Warmup Iteration 2: 734.784 ns/op

Warmup Iteration 3: 776.857 ns/op

Warmup Iteration 4: 862.338 ns/op

Warmup Iteration 5: 1161.400 ns/op

Warmup Iteration 6: 1390.485 ns/op

Warmup Iteration 7: 1564.553 ns/op

Warmup Iteration 8: 1740.864 ns/op

Warmup Iteration 9: 1886.047 ns/op

Warmup Iteration 10: 1996.744 ns/op

Iteration 1: 2134.201 ns/op
Iteration 2: 2237.158 ns/op
Iteration 3: 2373.474 ns/op
Iteration 4: 2480.673 ns/op
Iteration 5: 2600.095 ns/op

Run progress: 33.33% complete, ETA 00:04:05

Fork: 3 of 3

Warmup Iteration 1: 723.303 ns/op

Warmup Iteration 2: 730.116 ns/op

Warmup Iteration 3: 747.244 ns/op

Warmup Iteration 4: 870.327 ns/op

Warmup Iteration 5: 1163.600 ns/op

Warmup Iteration 6: 1391.905 ns/op

Warmup Iteration 7: 1609.695 ns/op

Warmup Iteration 8: 1747.073 ns/op

Warmup Iteration 9: 1901.428 ns/op

Warmup Iteration 10: 2037.695 ns/op

Iteration 1: 2138.309 ns/op
Iteration 2: 2261.873 ns/op
Iteration 3: 2379.407 ns/op
Iteration 4: 2495.306 ns/op
Iteration 5: 2598.640 ns/op

Result "org.openjdk.bench.java.lang.StringOther.internUnique":
2368.187 ±(99.9%) 183.667 ns/op [Average]
(min, avg, max) = (2126.098, 2368.187, 2602.970), stdev = 171.803
CI (99.9%): [2184.520, 2551.855] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesLatin1

Run progress: 37.50% complete, ETA 00:03:49

Fork: 1 of 3

Warmup Iteration 1: 27.793 ns/op

Warmup Iteration 2: 27.260 ns/op

Warmup Iteration 3: 26.885 ns/op

Warmup Iteration 4: 26.953 ns/op

Warmup Iteration 5: 27.178 ns/op

Warmup Iteration 6: 26.945 ns/op

Warmup Iteration 7: 27.820 ns/op

Warmup Iteration 8: 27.217 ns/op

Warmup Iteration 9: 27.922 ns/op

Warmup Iteration 10: 27.038 ns/op

Iteration 1: 26.504 ns/op
Iteration 2: 26.891 ns/op
Iteration 3: 26.936 ns/op
Iteration 4: 26.798 ns/op
Iteration 5: 26.750 ns/op

Run progress: 41.67% complete, ETA 00:03:34

Fork: 2 of 3

Warmup Iteration 1: 27.393 ns/op

Warmup Iteration 2: 27.862 ns/op

Warmup Iteration 3: 26.308 ns/op

Warmup Iteration 4: 27.392 ns/op

Warmup Iteration 5: 27.782 ns/op

Warmup Iteration 6: 27.679 ns/op

Warmup Iteration 7: 27.454 ns/op

Warmup Iteration 8: 26.879 ns/op

Warmup Iteration 9: 27.335 ns/op

Warmup Iteration 10: 26.984 ns/op

Iteration 1: 26.375 ns/op
Iteration 2: 26.432 ns/op
Iteration 3: 26.588 ns/op
Iteration 4: 26.340 ns/op
Iteration 5: 26.378 ns/op

Run progress: 45.83% complete, ETA 00:03:19

Fork: 3 of 3

Warmup Iteration 1: 27.703 ns/op

Warmup Iteration 2: 27.526 ns/op

Warmup Iteration 3: 26.139 ns/op

Warmup Iteration 4: 27.495 ns/op

Warmup Iteration 5: 27.239 ns/op

Warmup Iteration 6: 27.491 ns/op

Warmup Iteration 7: 26.857 ns/op

Warmup Iteration 8: 27.469 ns/op

Warmup Iteration 9: 27.390 ns/op

Warmup Iteration 10: 26.636 ns/op

Iteration 1: 26.784 ns/op
Iteration 2: 26.685 ns/op
Iteration 3: 26.630 ns/op
Iteration 4: 26.664 ns/op
Iteration 5: 26.914 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesLatin1":
26.645 ±(99.9%) 0.217 ns/op [Average]
(min, avg, max) = (26.340, 26.645, 26.936), stdev = 0.203
CI (99.9%): [26.427, 26.862] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesU1024LL

Run progress: 50.00% complete, ETA 00:03:03

Fork: 1 of 3

Warmup Iteration 1: 384.034 ns/op

Warmup Iteration 2: 386.145 ns/op

Warmup Iteration 3: 192.375 ns/op

Warmup Iteration 4: 385.160 ns/op

Warmup Iteration 5: 388.339 ns/op

Warmup Iteration 6: 394.354 ns/op

Warmup Iteration 7: 389.876 ns/op

Warmup Iteration 8: 392.541 ns/op

Warmup Iteration 9: 396.471 ns/op

Warmup Iteration 10: 189.031 ns/op

Iteration 1: 191.889 ns/op
Iteration 2: 191.517 ns/op
Iteration 3: 189.627 ns/op
Iteration 4: 189.437 ns/op
Iteration 5: 188.183 ns/op

Run progress: 54.17% complete, ETA 00:02:48

Fork: 2 of 3

Warmup Iteration 1: 386.763 ns/op

Warmup Iteration 2: 387.674 ns/op

Warmup Iteration 3: 188.244 ns/op

Warmup Iteration 4: 386.972 ns/op

Warmup Iteration 5: 394.980 ns/op

Warmup Iteration 6: 393.451 ns/op

Warmup Iteration 7: 385.662 ns/op

Warmup Iteration 8: 386.794 ns/op

Warmup Iteration 9: 388.771 ns/op

Warmup Iteration 10: 188.608 ns/op

Iteration 1: 191.659 ns/op
Iteration 2: 190.469 ns/op
Iteration 3: 190.416 ns/op
Iteration 4: 191.333 ns/op
Iteration 5: 193.085 ns/op

Run progress: 58.33% complete, ETA 00:02:33

Fork: 3 of 3

Warmup Iteration 1: 386.921 ns/op

Warmup Iteration 2: 386.713 ns/op

Warmup Iteration 3: 192.961 ns/op

Warmup Iteration 4: 388.269 ns/op

Warmup Iteration 5: 396.061 ns/op

Warmup Iteration 6: 392.936 ns/op

Warmup Iteration 7: 392.474 ns/op

Warmup Iteration 8: 397.539 ns/op

Warmup Iteration 9: 395.017 ns/op

Warmup Iteration 10: 192.466 ns/op

Iteration 1: 188.695 ns/op
Iteration 2: 189.254 ns/op
Iteration 3: 189.562 ns/op
Iteration 4: 191.183 ns/op
Iteration 5: 191.548 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesU1024LL":
190.524 ±(99.9%) 1.462 ns/op [Average]
(min, avg, max) = (188.183, 190.524, 193.085), stdev = 1.368
CI (99.9%): [189.061, 191.986] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesU1024LU

Run progress: 62.50% complete, ETA 00:02:17

Fork: 1 of 3

Warmup Iteration 1: 1886.842 ns/op

Warmup Iteration 2: 1951.907 ns/op

Warmup Iteration 3: 1336.138 ns/op

Warmup Iteration 4: 1969.057 ns/op

Warmup Iteration 5: 1977.544 ns/op

Warmup Iteration 6: 1955.080 ns/op

Warmup Iteration 7: 1955.399 ns/op

Warmup Iteration 8: 1948.878 ns/op

Warmup Iteration 9: 1974.372 ns/op

Warmup Iteration 10: 1325.548 ns/op

Iteration 1: 1324.446 ns/op
Iteration 2: 1317.174 ns/op
Iteration 3: 1320.426 ns/op
Iteration 4: 1322.694 ns/op
Iteration 5: 1354.689 ns/op

Run progress: 66.67% complete, ETA 00:02:02

Fork: 2 of 3

Warmup Iteration 1: 1881.938 ns/op

Warmup Iteration 2: 1940.219 ns/op

Warmup Iteration 3: 1331.686 ns/op

Warmup Iteration 4: 1966.264 ns/op

Warmup Iteration 5: 1959.955 ns/op

Warmup Iteration 6: 1943.985 ns/op

Warmup Iteration 7: 1960.606 ns/op

Warmup Iteration 8: 1950.825 ns/op

Warmup Iteration 9: 1953.092 ns/op

Warmup Iteration 10: 1325.135 ns/op

Iteration 1: 1329.842 ns/op
Iteration 2: 1324.868 ns/op
Iteration 3: 1335.141 ns/op
Iteration 4: 1341.477 ns/op
Iteration 5: 1345.784 ns/op

Run progress: 70.83% complete, ETA 00:01:47

Fork: 3 of 3

Warmup Iteration 1: 1726.861 ns/op

Warmup Iteration 2: 1760.492 ns/op

Warmup Iteration 3: 1338.569 ns/op

Warmup Iteration 4: 1762.623 ns/op

Warmup Iteration 5: 1767.371 ns/op

Warmup Iteration 6: 1749.098 ns/op

Warmup Iteration 7: 1748.149 ns/op

Warmup Iteration 8: 1768.330 ns/op

Warmup Iteration 9: 1777.755 ns/op

Warmup Iteration 10: 1335.878 ns/op

Iteration 1: 1313.298 ns/op
Iteration 2: 1326.874 ns/op
Iteration 3: 1334.138 ns/op
Iteration 4: 1324.629 ns/op
Iteration 5: 1333.529 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesU1024LU":
1329.934 ±(99.9%) 11.886 ns/op [Average]
(min, avg, max) = (1313.298, 1329.934, 1354.689), stdev = 11.118
CI (99.9%): [1318.048, 1341.820] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesU1024UL

Run progress: 75.00% complete, ETA 00:01:31

Fork: 1 of 3

Warmup Iteration 1: 1698.300 ns/op

Warmup Iteration 2: 1792.648 ns/op

Warmup Iteration 3: 1362.651 ns/op

Warmup Iteration 4: 1793.508 ns/op

Warmup Iteration 5: 1776.535 ns/op

Warmup Iteration 6: 1734.500 ns/op

Warmup Iteration 7: 1749.249 ns/op

Warmup Iteration 8: 1733.342 ns/op

Warmup Iteration 9: 1767.894 ns/op

Warmup Iteration 10: 1452.358 ns/op

Iteration 1: 1508.769 ns/op
Iteration 2: 1396.692 ns/op
Iteration 3: 1359.459 ns/op
Iteration 4: 1381.066 ns/op
Iteration 5: 1333.066 ns/op

Run progress: 79.17% complete, ETA 00:01:16

Fork: 2 of 3

Warmup Iteration 1: 1722.288 ns/op

Warmup Iteration 2: 1759.843 ns/op

Warmup Iteration 3: 1329.077 ns/op

Warmup Iteration 4: 1746.541 ns/op

Warmup Iteration 5: 1780.978 ns/op

Warmup Iteration 6: 1754.303 ns/op

Warmup Iteration 7: 1755.167 ns/op

Warmup Iteration 8: 1758.167 ns/op

Warmup Iteration 9: 1753.601 ns/op

Warmup Iteration 10: 1318.156 ns/op

Iteration 1: 1336.835 ns/op
Iteration 2: 1307.115 ns/op
Iteration 3: 1318.644 ns/op
Iteration 4: 1319.236 ns/op
Iteration 5: 1328.117 ns/op

Run progress: 83.33% complete, ETA 00:01:01

Fork: 3 of 3

Warmup Iteration 1: 1687.909 ns/op

Warmup Iteration 2: 1761.530 ns/op

Warmup Iteration 3: 1325.844 ns/op

Warmup Iteration 4: 1760.050 ns/op

Warmup Iteration 5: 1846.705 ns/op

Warmup Iteration 6: 1831.452 ns/op

Warmup Iteration 7: 1756.480 ns/op

Warmup Iteration 8: 1751.992 ns/op

Warmup Iteration 9: 1737.721 ns/op

Warmup Iteration 10: 1305.649 ns/op

Iteration 1: 1307.646 ns/op
Iteration 2: 1316.020 ns/op
Iteration 3: 1305.341 ns/op
Iteration 4: 1322.055 ns/op
Iteration 5: 1311.291 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesU1024UL":
1343.423 ±(99.9%) 56.946 ns/op [Average]
(min, avg, max) = (1305.341, 1343.423, 1508.769), stdev = 53.267
CI (99.9%): [1286.478, 1400.369] (assumes normal distribution)

JMH version: 1.34

VM version: JDK 19-internal, OpenJDK 64-Bit Server VM, 19-internal-adhoc..jdk

VM invoker: F:\workspace\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.exe

VM options: -Djava.library.path=f:\workspace\jdk\build\windows-x86_64-server-release\images\test\micro\native

Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 10 iterations, 1000 ms each

Measurement: 5 iterations, 1000 ms each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

Benchmark: org.openjdk.bench.java.lang.StringOther.regionMatchesU1024UU

Run progress: 87.50% complete, ETA 00:00:45

Fork: 1 of 3

Warmup Iteration 1: 384.307 ns/op

Warmup Iteration 2: 393.025 ns/op

Warmup Iteration 3: 188.918 ns/op

Warmup Iteration 4: 388.716 ns/op

Warmup Iteration 5: 389.077 ns/op

Warmup Iteration 6: 393.182 ns/op

Warmup Iteration 7: 396.038 ns/op

Warmup Iteration 8: 386.322 ns/op

Warmup Iteration 9: 388.637 ns/op

Warmup Iteration 10: 188.833 ns/op

Iteration 1: 189.554 ns/op
Iteration 2: 191.854 ns/op
Iteration 3: 190.570 ns/op
Iteration 4: 192.731 ns/op
Iteration 5: 193.851 ns/op

Run progress: 91.67% complete, ETA 00:00:30

Fork: 2 of 3

Warmup Iteration 1: 383.292 ns/op

Warmup Iteration 2: 390.798 ns/op

Warmup Iteration 3: 188.544 ns/op

Warmup Iteration 4: 386.818 ns/op

Warmup Iteration 5: 385.428 ns/op

Warmup Iteration 6: 391.337 ns/op

Warmup Iteration 7: 392.357 ns/op

Warmup Iteration 8: 395.916 ns/op

Warmup Iteration 9: 394.474 ns/op

Warmup Iteration 10: 190.443 ns/op

Iteration 1: 190.693 ns/op
Iteration 2: 191.330 ns/op
Iteration 3: 191.545 ns/op
Iteration 4: 189.648 ns/op
Iteration 5: 190.392 ns/op

Run progress: 95.83% complete, ETA 00:00:15

Fork: 3 of 3

Warmup Iteration 1: 387.182 ns/op

Warmup Iteration 2: 387.931 ns/op

Warmup Iteration 3: 191.014 ns/op

Warmup Iteration 4: 389.244 ns/op

Warmup Iteration 5: 389.680 ns/op

Warmup Iteration 6: 387.478 ns/op

Warmup Iteration 7: 386.103 ns/op

Warmup Iteration 8: 393.928 ns/op

Warmup Iteration 9: 394.937 ns/op

Warmup Iteration 10: 189.155 ns/op

Iteration 1: 189.103 ns/op
Iteration 2: 188.165 ns/op
Iteration 3: 190.563 ns/op
Iteration 4: 192.239 ns/op
Iteration 5: 192.589 ns/op

Result "org.openjdk.bench.java.lang.StringOther.regionMatchesU1024UU":
190.988 ±(99.9%) 1.634 ns/op [Average]
(min, avg, max) = (188.165, 190.988, 193.851), stdev = 1.529
CI (99.9%): [189.354, 192.623] (assumes normal distribution)

Run complete. Total time: 00:06:07

REMEMBER: The numbers below are just data. To gain reusable insights, you need to follow up on
why the numbers are the way they are. Use profilers (see -prof, -lprof), design factorial
experiments, perform baseline and negative tests that provide experimental control, make sure
the benchmarking environment is safe on JVM/OS/HW level, ask for reviews from the domain experts.
Do not assume the numbers tell you what you want them to tell.

NOTE: Current JVM experimentally supports Compiler Blackholes, and they are in use. Please exercise
extra caution when trusting the results, look into the generated code to check the benchmark still
works, and factor in a small probability of new VM bugs. Additionally, while comparisons between
different JVMs are already problematic, the performance difference caused by different Blackhole
modes can be very significant. Please make sure you use the consistent Blackhole mode for comparisons.

Benchmark Mode Cnt Score Error Units
StringOther.charAt avgt 15 70.888 ± 2.207 ns/op
StringOther.compareTo avgt 15 7.210 ± 0.046 ns/op
StringOther.internUnique avgt 15 2368.187 ± 183.667 ns/op
StringOther.regionMatchesLatin1 avgt 15 26.645 ± 0.217 ns/op
StringOther.regionMatchesU1024LL avgt 15 190.524 ± 1.462 ns/op
StringOther.regionMatchesU1024LU avgt 15 1329.934 ± 11.886 ns/op
StringOther.regionMatchesU1024UL avgt 15 1343.423 ± 56.946 ns/op
StringOther.regionMatchesU1024UU avgt 15 190.988 ± 1.634 ns/op

@samartddd
Copy link

samartddd commented Apr 20, 2022

Hi @samartddd, thanks for making a comment in an OpenJDK project!

All comments and discussions in the OpenJDK Community must be made available under the OpenJDK Terms of Use. If you already are an OpenJDK Author, Committer or Reviewer, please click here to open a new issue so that we can record that fact. Please Use "Add GitHub user samartddd for the summary.

If you are not an OpenJDK Author, Committer or Reviewer, simply check the box below to accept the OpenJDK Terms of Use for your comments.

Your comment will be automatically restored once you have accepted the OpenJDK Terms of Use.

@cl4es
Copy link
Member

cl4es commented Apr 25, 2022

Unfortunately this leads to an error for case-insensitive regionMatches between a latin-1-string that contains either of \u00b5 or \u00ff (these two code-points have upper case codepoints outside of the latin-1 range) and a UTF-16 string:

jshell> "\u00b5".regionMatches(true, 0, "\u0100", 0, 1)
|  Exception java.lang.ArrayIndexOutOfBoundsException: Index 924 out of bounds for length 256
|        at CharacterDataLatin1.getProperties (CharacterDataLatin1.java:74)
|        at CharacterDataLatin1.toLowerCase (CharacterDataLatin1.java:140)
|        at StringLatin1.regionMatchesCI_UTF16 (StringLatin1.java:420)
|        at String.regionMatches (String.java:2238)
|        at (#4:1)

@XenoAmess
Copy link
Contributor Author

Unfortunately this leads to an error for case-insensitive regionMatches between a latin-1-string that contains either of \u00b5 or \u00ff (these two code-points have upper case codepoints outside of the latin-1 range) and a UTF-16 string:

jshell> "\u00b5".regionMatches(true, 0, "\u0100", 0, 1)
|  Exception java.lang.ArrayIndexOutOfBoundsException: Index 924 out of bounds for length 256
|        at CharacterDataLatin1.getProperties (CharacterDataLatin1.java:74)
|        at CharacterDataLatin1.toLowerCase (CharacterDataLatin1.java:140)
|        at StringLatin1.regionMatchesCI_UTF16 (StringLatin1.java:420)
|        at String.regionMatches (String.java:2238)
|        at (#4:1)

@cl4es Yes, you are correct.

And if change it to CharacterDataLatin1.instance.toLowerCase(u1), it would strongly harm performance.

@XenoAmess
Copy link
Contributor Author

close as not worthy.

@XenoAmess XenoAmess closed this Apr 25, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
core-libs core-libs-dev@openjdk.org rfr Pull request is ready for review
Development

Successfully merging this pull request may close these issues.

4 participants