1 package org.openjdk.bench.vm.gc.barriers.arraycopy;
 2 
 3 import org.openjdk.jmh.annotations.*;
 4 
 5 import java.util.concurrent.TimeUnit;
 6 
 7 @Warmup(iterations = 3, time = 1, timeUnit = TimeUnit.SECONDS)
 8 @Measurement(iterations = 3, time = 1, timeUnit = TimeUnit.SECONDS)
 9 @Fork(3)
10 @BenchmarkMode(Mode.AverageTime)
11 @OutputTimeUnit(TimeUnit.NANOSECONDS)
12 @State(Scope.Thread)
13 public class RefArray {
14 
15     Object[] srcNull;
16     Object[] srcObj;
17 
18     @Param({"1", "2", "4", "8", "16", "32", "64"})
19     int size;
20 
21     @Setup
22     public void setup() {
23         srcNull = new Object[size];
24         srcObj = new Object[size];
25         for (int c = 0; c < size; c++) {
26             srcObj[c] = new Object();
27         }
28     }
29 
30     @Benchmark
31     @CompilerControl(CompilerControl.Mode.DONT_INLINE)
32     public Object objs() {
33         Object[] dst = new Object[size];
34         System.arraycopy(srcObj, 0, dst, 0, size);
35         return dst;
36     }
37 
38     @Benchmark
39     @CompilerControl(CompilerControl.Mode.DONT_INLINE)
40     public Object nulls() {
41         Object[] dst = new Object[size];
42         System.arraycopy(srcNull, 0, dst, 0, size);
43         return dst;
44     }
45 
46 }