changeset 32:7b87f91c5db9

root.(local|synchronizers) sweepup: only measure the rootset effects
author shade
date Fri, 02 Dec 2016 12:43:28 +0100
parents 048984ee8010
children 2302c92fc1d9
files src/main/java/org/openjdk/gcbench/GCBench.java src/main/java/org/openjdk/gcbench/roots/Locals.java src/main/java/org/openjdk/gcbench/roots/Synchronizers.java
diffstat 3 files changed, 18 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/org/openjdk/gcbench/GCBench.java	Thu Dec 01 16:19:09 2016 +0100
+++ b/src/main/java/org/openjdk/gcbench/GCBench.java	Fri Dec 02 12:43:28 2016 +0100
@@ -263,7 +263,7 @@
 
         {
             String groupDescr = "Stresses the application root set. Beefs up the particular part of root set, " +
-                    "and then runs peak allocation tests to see if it affects garbage collection.";
+                    "and then runs peak allocation tests to see if it affects garbage collection. ";
 
             tests.add(new DimensionalTest(baseOpts, org.openjdk.gcbench.roots.Strings.class,
                     "roots.strings", groupDescr + "Allocates and retains a number of interned Strings.",
@@ -271,7 +271,7 @@
             ));
 
             tests.add(new DimensionalTest(baseOpts, org.openjdk.gcbench.roots.Synchronizers.class,
-                    "roots.synchronizers", groupDescr + "Inflates and retains a number of synchronized objects.",
+                    "roots.synchronizers", groupDescr + "Inflates and retains a number of synchronized objects per each thread.",
                     Dimensions.size(Sequence.powersOfTen_Sub(100, 100000))
             ));
 
--- a/src/main/java/org/openjdk/gcbench/roots/Locals.java	Thu Dec 01 16:19:09 2016 +0100
+++ b/src/main/java/org/openjdk/gcbench/roots/Locals.java	Fri Dec 02 12:43:28 2016 +0100
@@ -13,7 +13,7 @@
 @BenchmarkMode(Mode.AverageTime)
 @OutputTimeUnit(TimeUnit.MICROSECONDS)
 @Threads(Threads.MAX)
-@State(Scope.Benchmark)
+@State(Scope.Thread)
 public class Locals {
 
     List<Object> list;
--- a/src/main/java/org/openjdk/gcbench/roots/Synchronizers.java	Thu Dec 01 16:19:09 2016 +0100
+++ b/src/main/java/org/openjdk/gcbench/roots/Synchronizers.java	Fri Dec 02 12:43:28 2016 +0100
@@ -2,6 +2,7 @@
 
 import org.openjdk.jmh.annotations.*;
 import org.openjdk.jmh.infra.Blackhole;
+import org.openjdk.jmh.infra.Control;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -9,11 +10,11 @@
 
 @Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
 @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
-@Fork(value = 1, jvmArgsAppend = "-Xss32m")
+@Fork(value = 1, jvmArgsAppend = {"-Xss32m"})
 @BenchmarkMode(Mode.AverageTime)
 @OutputTimeUnit(TimeUnit.MILLISECONDS)
 @Threads(Threads.MAX)
-@State(Scope.Benchmark)
+@State(Scope.Thread)
 public class Synchronizers {
 
     List<Object> list;
@@ -30,11 +31,11 @@
     }
 
     @Benchmark
-    public void test(Blackhole bh) throws InterruptedException {
-        recursiveLock(bh, list, 0);
+    public void test(Control cnt, Blackhole bh) throws InterruptedException {
+        recursiveLock(cnt, bh, list, 0);
     }
 
-    private void recursiveLock(Blackhole bh, List<Object> list, int i) {
+    private void recursiveLock(Control cnt, Blackhole bh, List<Object> list, int i) {
         if (i < list.size()) {
             Object o0 = list.get(i + 0);
             Object o1 = list.get(i + 1);
@@ -56,7 +57,7 @@
                                         synchronized (o7) {
                                             synchronized (o8) {
                                                 synchronized (o9) {
-                                                    recursiveLock(bh, list, i + 10);
+                                                    recursiveLock(cnt, bh, list, i + 10);
                                                 }
                                             }
                                         }
@@ -68,9 +69,14 @@
                 }
             }
         } else {
-            for (int c = 0; c < size; c++) {
-                bh.consume(list.get(c).hashCode());
-                list.set(c, new Object());
+            for (Object o : list) {
+                bh.consume(o.hashCode());
+            }
+            if (cnt.startMeasurement) {
+                // Do not leave until we are finished
+                while (!cnt.stopMeasurement) {
+                    bh.consume(new Object());
+                }
             }
         }
     }