Mercurial > hg > gc-bench
changeset 57:1655f5729b5a
Yielding tests.
author | shade |
---|---|
date | Mon, 19 Dec 2016 18:40:11 +0100 |
parents | c796a662ffba |
children | d41292cbeb90 |
files | src/main/java/org/openjdk/gcbench/alloc/uninit/AllocUninit.java src/main/java/org/openjdk/gcbench/alloc/uninit/IntArray.java src/main/java/org/openjdk/gcbench/tenure/Arrays.java src/main/java/org/openjdk/gcbench/tenure/Queues.java src/main/java/org/openjdk/gcbench/tests/AllocUninit.java src/main/java/org/openjdk/gcbench/tests/UnderPressureTest.java src/main/java/org/openjdk/gcbench/yield/ArrayIteration.java src/main/java/org/openjdk/gcbench/yield/Sleeps.java |
diffstat | 8 files changed, 143 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/src/main/java/org/openjdk/gcbench/alloc/uninit/AllocUninit.java Mon Dec 19 17:23:14 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -package org.openjdk.gcbench.alloc.uninit; - -import jdk.internal.misc.Unsafe; - -import java.lang.reflect.Field; - -public class AllocUninit { - - static final Unsafe U; - - static { - try { - Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe"); - unsafeField.setAccessible(true); - U = (Unsafe) unsafeField.get(null); - } catch (Exception e) { - throw new AssertionError(e); - } - } - - public static Object alloc(int size) { - return U.allocateUninitializedArray(int.class, size); - } -}
--- a/src/main/java/org/openjdk/gcbench/alloc/uninit/IntArray.java Mon Dec 19 17:23:14 2016 +0100 +++ b/src/main/java/org/openjdk/gcbench/alloc/uninit/IntArray.java Mon Dec 19 18:40:11 2016 +0100 @@ -1,5 +1,6 @@ package org.openjdk.gcbench.alloc.uninit; +import org.openjdk.gcbench.tests.AllocUninit; import org.openjdk.jmh.annotations.*; import java.util.concurrent.TimeUnit;
--- a/src/main/java/org/openjdk/gcbench/tenure/Arrays.java Mon Dec 19 17:23:14 2016 +0100 +++ b/src/main/java/org/openjdk/gcbench/tenure/Arrays.java Mon Dec 19 18:40:11 2016 +0100 @@ -1,6 +1,6 @@ package org.openjdk.gcbench.tenure; -import org.openjdk.gcbench.alloc.uninit.AllocUninit; +import org.openjdk.gcbench.tests.AllocUninit; import org.openjdk.jmh.annotations.*; import java.util.concurrent.TimeUnit;
--- a/src/main/java/org/openjdk/gcbench/tenure/Queues.java Mon Dec 19 17:23:14 2016 +0100 +++ b/src/main/java/org/openjdk/gcbench/tenure/Queues.java Mon Dec 19 18:40:11 2016 +0100 @@ -1,9 +1,7 @@ package org.openjdk.gcbench.tenure; -import org.openjdk.gcbench.alloc.uninit.AllocUninit; import org.openjdk.jmh.annotations.*; -import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.TimeUnit;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/org/openjdk/gcbench/tests/AllocUninit.java Mon Dec 19 18:40:11 2016 +0100 @@ -0,0 +1,24 @@ +package org.openjdk.gcbench.tests; + +import jdk.internal.misc.Unsafe; + +import java.lang.reflect.Field; + +public class AllocUninit { + + static final Unsafe U; + + static { + try { + Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe"); + unsafeField.setAccessible(true); + U = (Unsafe) unsafeField.get(null); + } catch (Exception e) { + throw new AssertionError(e); + } + } + + public static Object alloc(int size) { + return U.allocateUninitializedArray(int.class, size); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/org/openjdk/gcbench/tests/UnderPressureTest.java Mon Dec 19 18:40:11 2016 +0100 @@ -0,0 +1,40 @@ +package org.openjdk.gcbench.tests; + +import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.infra.Blackhole; + + +@Fork(jvmArgsPrepend = {"--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED"}) +@State(Scope.Benchmark) +public class UnderPressureTest { + + SuperAllocator allocator; + + @Setup + public void setup(Blackhole bh) { + allocator = new SuperAllocator(bh); + allocator.start(); + } + + @TearDown + public void tearDown() throws InterruptedException { + allocator.interrupt(); + allocator.join(); + } + + public class SuperAllocator extends Thread { + private final Blackhole bh; + + public SuperAllocator(Blackhole bh) { + this.bh = bh; + } + + @Override + public void run() { + while (!Thread.interrupted()) { + bh.consume(AllocUninit.alloc(1000)); + } + } + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/org/openjdk/gcbench/yield/ArrayIteration.java Mon Dec 19 18:40:11 2016 +0100 @@ -0,0 +1,44 @@ +package org.openjdk.gcbench.yield; + +import org.openjdk.gcbench.tests.UnderPressureTest; +import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.infra.Blackhole; + +import java.util.ArrayList; +import java.util.concurrent.TimeUnit; + +@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) +@Fork(1) +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Threads(Threads.MAX) +@State(Scope.Benchmark) +public class ArrayIteration extends UnderPressureTest { + + int[] arr; + + @Param({"100000"}) + int size; + + @Setup + public void setup(Blackhole bh) { + super.setup(bh); + arr = new int[size]; + } + + @TearDown + public void tearDown() throws InterruptedException { + super.tearDown(); + } + + @Benchmark + public int test() throws InterruptedException { + int r = 0; + for (int i : arr) { + r += i; + } + return r; + } + +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/org/openjdk/gcbench/yield/Sleeps.java Mon Dec 19 18:40:11 2016 +0100 @@ -0,0 +1,33 @@ +package org.openjdk.gcbench.yield; + +import org.openjdk.gcbench.tests.UnderPressureTest; +import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.infra.Blackhole; + +import java.util.concurrent.TimeUnit; + +@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) +@Fork(1) +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Threads(Threads.MAX) +@State(Scope.Benchmark) +public class Sleeps extends UnderPressureTest { + + @Setup + public void setup(Blackhole bh) { + super.setup(bh); + } + + @TearDown + public void tearDown() throws InterruptedException { + super.tearDown(); + } + + @Benchmark + public void test() throws InterruptedException { + Thread.sleep(1); + } + +} \ No newline at end of file