esaulpaugh commented on PR #212:
URL: https://github.com/apache/ant/pull/212#issuecomment-2925232549

   I have not faced a performance issue but I discovered this trick while 
optimizing a String parser in one of my projects. It performs better in 
microbenchmarks compared to building an `ArrayList`. I suggested it to gson as 
well: https://github.com/google/gson/pull/2734
   
   On corretto-11.0.27 aarch64:
   
   ```
   Benchmark     Mode  Cnt   Score    Error  Units
   Measure.arr   avgt   14  17.527 ±  0.435  ns/op
   Measure.list  avgt   14  44.013 ± 27.030  ns/op
   ```
   
   On graalvm-jdk-24+36.1 (24.2.0) aarch64:
   
   ```
   Benchmark     Mode  Cnt   Score   Error  Units
   Measure.arr   avgt   14   9.795 ± 0.173  ns/op
   Measure.list  avgt   14  41.321 ± 3.544  ns/op
   ```
   
   ```java
   @State(Scope.Benchmark)
   @Fork(2)
   @BenchmarkMode(Mode.AverageTime)
   @Warmup(iterations = 7, time = 500, timeUnit = TimeUnit.MILLISECONDS)
   @Measurement(iterations = 7, time = 500, timeUnit = TimeUnit.MILLISECONDS)
   @OutputTimeUnit(TimeUnit.NANOSECONDS)
   public class Measure {
   
     private static final String[] STRINGS = { null, "", "00", "\0", "...", 
null, "H", "ab", "+", "UUU", null, null, "5\t5" };
     
     @Benchmark
     public void list(Blackhole blackhole) {
         ArrayList<String> list = new ArrayList<>(/* STRINGS.length */);
         for (String s : STRINGS) {
             if (s != null) {
                 list.add(s);
             }
         }
         blackhole.consume(list.toArray(new String[0]));
     }
     
     @Benchmark
     public void arr(Blackhole blackhole) {
         String[] arr = new String[STRINGS.length];
         int i = 0;
         for (String s : STRINGS) {
             if (s != null) {
                 arr[i++] = s;
             }
         }
         blackhole.consume(Arrays.copyOf(arr, i));
     }
   }
   ```
   
   It's unlikely that this change alone would make a noticeable difference to 
users, but small changes can add up eventually, in my experience.


-- 
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: dev-unsubscr...@ant.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org

Reply via email to