On Sun, 2 Oct 2022 22:16:46 GMT, Claes Redestad <redes...@openjdk.org> wrote:

>> `checkedExceptions` param of `MethodAccessorGenerator.generateMethod()` is 
>> unused and should be removed in order to prevent allocations from 
>> `Method.getExceptionTypes()`
>
> Seems reasonable, although these generators should only rarely be used when 
> doing reflection. I'm curious if you have some test or micro where the 
> improvement shows?

@cl4es this code is frequently invoked in Spring-based applications at start-up 
time. I couldn't design the benchmark for this particular case, assuming that 
in majority of cases `Method.getExceptionTypes()` returns a copy of an empty 
array I think we save about 12 ns and 16 bytes:

@State(Scope.Thread)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@BenchmarkMode(value = Mode.AverageTime)
public class ArrayCloneBenchmark {
  private final Object[] array = new Object[0];

  @Benchmark
  public Object[] cloneArray() {
    return array.clone();
  }
}


Benchmark                                                        Mode  Cnt    
Score    Error   Units
ArrayCloneBenchmark.cloneArray                                   avgt   20   
12,713 ±  0,484   ns/op
ArrayCloneBenchmark.cloneArray:·gc.alloc.rate                    avgt   20  
800,247 ± 29,584  MB/sec
ArrayCloneBenchmark.cloneArray:·gc.alloc.rate.norm               avgt   20   
16,004 ±  0,001    B/op
ArrayCloneBenchmark.cloneArray:·gc.churn.G1_Eden_Space           avgt   20  
804,623 ± 38,424  MB/sec
ArrayCloneBenchmark.cloneArray:·gc.churn.G1_Eden_Space.norm      avgt   20   
16,091 ±  0,455    B/op
ArrayCloneBenchmark.cloneArray:·gc.churn.G1_Survivor_Space       avgt   20    
0,006 ±  0,002  MB/sec
ArrayCloneBenchmark.cloneArray:·gc.churn.G1_Survivor_Space.norm  avgt   20   ≈ 
10⁻⁴             B/op
ArrayCloneBenchmark.cloneArray:·gc.count                         avgt   20  
286,000           counts
ArrayCloneBenchmark.cloneArray:·gc.time                          avgt   20  
171,000               ms

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

PR: https://git.openjdk.org/jdk/pull/10526

Reply via email to