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 }