30 import org.openjdk.jmh.annotations.Mode;
31 import org.openjdk.jmh.annotations.OutputTimeUnit;
32 import org.openjdk.jmh.annotations.Setup;
33 import org.openjdk.jmh.annotations.State;
34 import org.openjdk.jmh.annotations.TearDown;
35 import org.openjdk.jmh.annotations.Warmup;
36 import sun.misc.Unsafe;
37
38 import java.nio.ByteBuffer;
39 import java.nio.ByteOrder;
40 import java.nio.FloatBuffer;
41 import java.util.concurrent.TimeUnit;
42
43 import static java.lang.foreign.ValueLayout.JAVA_INT;
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 LoopOverPollutedBuffer {
52
53 static final int ELEM_SIZE = 1_000_000;
54 static final int CARRIER_SIZE = (int) JAVA_INT.byteSize();
55 static final int ALLOC_SIZE = ELEM_SIZE * CARRIER_SIZE;
56
57 static final Unsafe unsafe = Utils.unsafe;
58
59 ByteBuffer dbb = ByteBuffer.allocateDirect(ALLOC_SIZE).order(ByteOrder.nativeOrder());
60 byte[] arr = new byte[ALLOC_SIZE];
61 ByteBuffer hbb = ByteBuffer.wrap(arr).order(ByteOrder.nativeOrder());
62 FloatBuffer hfb = hbb.asFloatBuffer();
63
64
65 @Setup
66 public void setup() {
67 for (int i = 0; i < ELEM_SIZE; i++) {
68 dbb.putFloat(i * 4, i);
69 hbb.putFloat(i * 4, i);
70 }
|
30 import org.openjdk.jmh.annotations.Mode;
31 import org.openjdk.jmh.annotations.OutputTimeUnit;
32 import org.openjdk.jmh.annotations.Setup;
33 import org.openjdk.jmh.annotations.State;
34 import org.openjdk.jmh.annotations.TearDown;
35 import org.openjdk.jmh.annotations.Warmup;
36 import sun.misc.Unsafe;
37
38 import java.nio.ByteBuffer;
39 import java.nio.ByteOrder;
40 import java.nio.FloatBuffer;
41 import java.util.concurrent.TimeUnit;
42
43 import static java.lang.foreign.ValueLayout.JAVA_INT;
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 LoopOverPollutedBuffer {
52
53 static final int ELEM_SIZE = 1_000_000;
54 static final int CARRIER_SIZE = (int) JAVA_INT.byteSize();
55 static final int ALLOC_SIZE = ELEM_SIZE * CARRIER_SIZE;
56
57 static final Unsafe unsafe = Utils.unsafe;
58
59 ByteBuffer dbb = ByteBuffer.allocateDirect(ALLOC_SIZE).order(ByteOrder.nativeOrder());
60 byte[] arr = new byte[ALLOC_SIZE];
61 ByteBuffer hbb = ByteBuffer.wrap(arr).order(ByteOrder.nativeOrder());
62 FloatBuffer hfb = hbb.asFloatBuffer();
63
64
65 @Setup
66 public void setup() {
67 for (int i = 0; i < ELEM_SIZE; i++) {
68 dbb.putFloat(i * 4, i);
69 hbb.putFloat(i * 4, i);
70 }
|