You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@netbeans.apache.org by GitBox <gi...@apache.org> on 2021/11/12 01:07:01 UTC
[GitHub] [netbeans] pepness commented on pull request #3241: [NETBEANS-6081] - Cleaning enterprise module part 4/8
pepness commented on pull request #3241:
URL: https://github.com/apache/netbeans/pull/3241#issuecomment-966736673
Hi, this is the code of my benchmarks, searching inside a string of length 52 and length 101:
```java
package javaperformance;
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Warmup;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
/**
*
* @author pepness
*/
@State(Scope.Benchmark)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS)
@Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS)
@Fork(3)
public class IndexOfTest {
private String str;
private char c;
private String s;
@Setup
public void setup() {
// str = " !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; // length 101
str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; // length 52
s = "z";
c = 'z';
}
@Benchmark
public int indexOfChar() {
return str.indexOf('z');
}
@Benchmark
public int indexOfString() {
return str.indexOf("z");
}
@Benchmark
public int lastIndexOfChar() {
return str.lastIndexOf('z');
}
@Benchmark
public int lastIndexOfString() {
return str.lastIndexOf("z");
}
@Benchmark
public int indirectIndexOfChar() {
return str.indexOf(c);
}
@Benchmark
public int indirectIndexOfString() {
return str.indexOf(s);
}
@Benchmark
public int indirectLastIndexOfChar() {
return str.indexOf(c);
}
@Benchmark
public int indirectLastIndexOfString() {
return str.indexOf(s);
}
public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(IndexOfTest.class.getSimpleName())
.threads(1)
.build();
new Runner(opt).run();
}
}
```
These are the results:
JMH version: 1.33
VM version: **JDK 1.7.0_322**, OpenJDK 64-Bit Server VM, 24.322-b01
VM invoker: /opt/jvm/zulu-7/jre/bin/java
Search inside a string of length 52
```
Benchmark Mode Cnt Score Error Units
IndexOfTest.indexOfChar avgt 30 9.364 ± 0.038 ns/op
IndexOfTest.indexOfString avgt 30 9.498 ± 0.004 ns/op
IndexOfTest.indirectIndexOfChar avgt 30 9.939 ± 0.184 ns/op
IndexOfTest.indirectIndexOfString avgt 30 10.128 ± 0.013 ns/op
IndexOfTest.indirectLastIndexOfChar avgt 30 9.788 ± 0.139 ns/op
IndexOfTest.indirectLastIndexOfString avgt 30 10.115 ± 0.002 ns/op
IndexOfTest.lastIndexOfChar avgt 30 1.707 ± 0.008 ns/op
IndexOfTest.lastIndexOfString avgt 30 1.695 ± 0.006 ns/op
```
Search inside a string of length 101
```
Benchmark Mode Cnt Score Error Units
IndexOfTest.indexOfChar avgt 30 14.560 ± 0.050 ns/op
IndexOfTest.indexOfString avgt 30 14.465 ± 0.016 ns/op
IndexOfTest.indirectIndexOfChar avgt 30 15.789 ± 0.525 ns/op
IndexOfTest.indirectIndexOfString avgt 30 15.098 ± 0.048 ns/op
IndexOfTest.indirectLastIndexOfChar avgt 30 15.320 ± 0.535 ns/op
IndexOfTest.indirectLastIndexOfString avgt 30 15.104 ± 0.071 ns/op
IndexOfTest.lastIndexOfChar avgt 30 2.737 ± 0.211 ns/op
IndexOfTest.lastIndexOfString avgt 30 2.630 ± 0.010 ns/op
```
VM version: **JDK 1.8.0**_312, OpenJDK 64-Bit Server VM, 25.312-b07
VM invoker: /opt/jvm/zulu-8/jre/bin/java
Search inside a string of length 52
```
Benchmark Mode Cnt Score Error Units
IndexOfTest.indexOfChar avgt 30 9.555 ± 0.115 ns/op
IndexOfTest.indexOfString avgt 30 9.548 ± 0.082 ns/op
IndexOfTest.indirectIndexOfChar avgt 30 9.634 ± 0.114 ns/op
IndexOfTest.indirectIndexOfString avgt 30 10.173 ± 0.040 ns/op
IndexOfTest.indirectLastIndexOfChar avgt 30 9.587 ± 0.081 ns/op
IndexOfTest.indirectLastIndexOfString avgt 30 10.167 ± 0.039 ns/op
IndexOfTest.lastIndexOfChar avgt 30 1.630 ± 0.010 ns/op
IndexOfTest.lastIndexOfString avgt 30 1.724 ± 0.007 ns/op
```
Search inside a string of length 101
```
Benchmark Mode Cnt Score Error Units
IndexOfTest.indexOfChar avgt 30 14.631 ± 0.081 ns/op
IndexOfTest.indexOfString avgt 30 14.479 ± 0.038 ns/op
IndexOfTest.indirectIndexOfChar avgt 30 14.696 ± 0.055 ns/op
IndexOfTest.indirectIndexOfString avgt 30 15.093 ± 0.011 ns/op
IndexOfTest.indirectLastIndexOfChar avgt 30 14.772 ± 0.032 ns/op
IndexOfTest.indirectLastIndexOfString avgt 30 15.190 ± 0.065 ns/op
IndexOfTest.lastIndexOfChar avgt 30 2.509 ± 0.012 ns/op
IndexOfTest.lastIndexOfString avgt 30 2.642 ± 0.019 ns/op
```
VM version: **JDK 11.0.13**, OpenJDK 64-Bit Server VM, 11.0.13+8-LTS
VM invoker: /opt/jvm/zulu-11/bin/java
Search inside a string of length 52
```
Benchmark Mode Cnt Score Error Units
IndexOfTest.indexOfChar avgt 30 10.686 ± 0.224 ns/op
IndexOfTest.indexOfString avgt 30 6.432 ± 0.023 ns/op
IndexOfTest.indirectIndexOfChar avgt 30 10.806 ± 0.171 ns/op
IndexOfTest.indirectIndexOfString avgt 30 8.114 ± 0.131 ns/op
IndexOfTest.indirectLastIndexOfChar avgt 30 10.632 ± 0.082 ns/op
IndexOfTest.indirectLastIndexOfString avgt 30 7.837 ± 0.226 ns/op
IndexOfTest.lastIndexOfChar avgt 30 2.167 ± 0.014 ns/op
IndexOfTest.lastIndexOfString avgt 30 1.996 ± 0.011 ns/op
```
Search inside a string of length 101
```
Benchmark Mode Cnt Score Error Units
IndexOfTest.indexOfChar avgt 30 16.409 ± 0.148 ns/op
IndexOfTest.indexOfString avgt 30 8.459 ± 0.135 ns/op
IndexOfTest.indirectIndexOfChar avgt 30 16.486 ± 0.357 ns/op
IndexOfTest.indirectIndexOfString avgt 30 9.302 ± 0.006 ns/op
IndexOfTest.indirectLastIndexOfChar avgt 30 16.512 ± 0.327 ns/op
IndexOfTest.indirectLastIndexOfString avgt 30 9.347 ± 0.036 ns/op
IndexOfTest.lastIndexOfChar avgt 30 3.747 ± 0.013 ns/op
IndexOfTest.lastIndexOfString avgt 30 3.363 ± 0.027 ns/op
```
VM version: **JDK 17.0.1**, OpenJDK 64-Bit Server VM, 17.0.1+12-LTS
VM invoker: /opt/jvm/corretto-17/bin/java
Search inside a string of length 52
```
Benchmark Mode Cnt Score Error Units
IndexOfTest.indexOfChar avgt 30 4.113 ± 0.088 ns/op
IndexOfTest.indexOfString avgt 30 6.413 ± 0.024 ns/op
IndexOfTest.indirectIndexOfChar avgt 30 3.954 ± 0.022 ns/op
IndexOfTest.indirectIndexOfString avgt 30 7.657 ± 0.094 ns/op
IndexOfTest.indirectLastIndexOfChar avgt 30 3.973 ± 0.021 ns/op
IndexOfTest.indirectLastIndexOfString avgt 30 7.441 ± 0.118 ns/op
IndexOfTest.lastIndexOfChar avgt 30 2.257 ± 0.043 ns/op
IndexOfTest.lastIndexOfString avgt 30 1.963 ± 0.017 ns/op
```
Search inside a string of length 101
```
Benchmark Mode Cnt Score Error Units
IndexOfTest.indexOfChar avgt 30 3.585 ± 0.012 ns/op
IndexOfTest.indexOfString avgt 30 8.270 ± 0.022 ns/op
IndexOfTest.indirectIndexOfChar avgt 30 3.726 ± 0.029 ns/op
IndexOfTest.indirectIndexOfString avgt 30 9.152 ± 0.050 ns/op
IndexOfTest.indirectLastIndexOfChar avgt 30 3.935 ± 0.016 ns/op
IndexOfTest.indirectLastIndexOfString avgt 30 9.118 ± 0.034 ns/op
IndexOfTest.lastIndexOfChar avgt 30 3.784 ± 0.019 ns/op
IndexOfTest.lastIndexOfString avgt 30 3.369 ± 0.024 ns/op
```
According to my testing (it could be wrong, hope you can test it) when using indexOf/lastIndexOf with chars is up to 53% faster using the latest LTS JDK 17+ but it is slower with previous LTS JDK 11 up to 93%. When using JDK 7 or 8 the performance difference is negligible at least at a length of 101 or less.
If NetBeans is going to be compiled using JDK 11 I would recommend using "c" instead of 'c'.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@netbeans.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@netbeans.apache.org
For additional commands, e-mail: notifications-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists