30 import org.openjdk.jmh.annotations.Measurement;
31 import org.openjdk.jmh.annotations.Mode;
32 import org.openjdk.jmh.annotations.OutputTimeUnit;
33 import org.openjdk.jmh.annotations.Setup;
34 import org.openjdk.jmh.annotations.State;
35 import org.openjdk.jmh.annotations.TearDown;
36 import org.openjdk.jmh.annotations.Warmup;
37 import sun.misc.Unsafe;
38
39 import java.nio.ByteBuffer;
40 import java.nio.ByteOrder;
41 import java.util.concurrent.TimeUnit;
42
43 import static java.lang.foreign.ValueLayout.*;
44
45 @BenchmarkMode(Mode.AverageTime)
46 @Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS)
47 @Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS)
48 @State(org.openjdk.jmh.annotations.Scope.Thread)
49 @OutputTimeUnit(TimeUnit.MILLISECONDS)
50 @Fork(value = 3, jvmArgsAppend = "--enable-preview")
51 public class LoopOverNew extends JavaLayouts {
52
53 static final Unsafe unsafe = Utils.unsafe;
54
55 static final int ELEM_SIZE = 1_000_000;
56 static final int CARRIER_SIZE = (int)JAVA_INT.byteSize();
57 static final int ALLOC_SIZE = ELEM_SIZE * CARRIER_SIZE;
58 static final MemoryLayout ALLOC_LAYOUT = MemoryLayout.sequenceLayout(ELEM_SIZE, JAVA_INT);
59 final Arena arena = Arena.ofConfined();
60 final SegmentAllocator recyclingAlloc = SegmentAllocator.prefixAllocator(arena.allocate(ALLOC_LAYOUT));
61
62 @TearDown
63 public void tearDown() throws Throwable {
64 arena.close();
65 }
66
67 @Benchmark
68 public void unsafe_loop() {
69 long unsafe_addr = unsafe.allocateMemory(ALLOC_SIZE);
70 for (int i = 0; i < ELEM_SIZE; i++) {
|
30 import org.openjdk.jmh.annotations.Measurement;
31 import org.openjdk.jmh.annotations.Mode;
32 import org.openjdk.jmh.annotations.OutputTimeUnit;
33 import org.openjdk.jmh.annotations.Setup;
34 import org.openjdk.jmh.annotations.State;
35 import org.openjdk.jmh.annotations.TearDown;
36 import org.openjdk.jmh.annotations.Warmup;
37 import sun.misc.Unsafe;
38
39 import java.nio.ByteBuffer;
40 import java.nio.ByteOrder;
41 import java.util.concurrent.TimeUnit;
42
43 import static java.lang.foreign.ValueLayout.*;
44
45 @BenchmarkMode(Mode.AverageTime)
46 @Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS)
47 @Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS)
48 @State(org.openjdk.jmh.annotations.Scope.Thread)
49 @OutputTimeUnit(TimeUnit.MILLISECONDS)
50 @Fork(3)
51 public class LoopOverNew extends JavaLayouts {
52
53 static final Unsafe unsafe = Utils.unsafe;
54
55 static final int ELEM_SIZE = 1_000_000;
56 static final int CARRIER_SIZE = (int)JAVA_INT.byteSize();
57 static final int ALLOC_SIZE = ELEM_SIZE * CARRIER_SIZE;
58 static final MemoryLayout ALLOC_LAYOUT = MemoryLayout.sequenceLayout(ELEM_SIZE, JAVA_INT);
59 final Arena arena = Arena.ofConfined();
60 final SegmentAllocator recyclingAlloc = SegmentAllocator.prefixAllocator(arena.allocate(ALLOC_LAYOUT));
61
62 @TearDown
63 public void tearDown() throws Throwable {
64 arena.close();
65 }
66
67 @Benchmark
68 public void unsafe_loop() {
69 long unsafe_addr = unsafe.allocateMemory(ALLOC_SIZE);
70 for (int i = 0; i < ELEM_SIZE; i++) {
|