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