changeset 67:12d486b68158

retain.* tests should have payloads. retain.hashmap test.
author shade
date Tue, 24 Jan 2017 13:09:59 +0100
parents a009ea5f9d2c
children 10a7f1362479
files src/main/java/org/openjdk/gcbench/GCBench.java src/main/java/org/openjdk/gcbench/retain/HashMaps.java src/main/java/org/openjdk/gcbench/retain/LinkedLists.java src/main/java/org/openjdk/gcbench/retain/RefArray.java src/main/java/org/openjdk/gcbench/retain/Tree.java
diffstat 5 files changed, 61 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/org/openjdk/gcbench/GCBench.java	Mon Jan 23 11:57:39 2017 +0100
+++ b/src/main/java/org/openjdk/gcbench/GCBench.java	Tue Jan 24 13:09:59 2017 +0100
@@ -248,19 +248,26 @@
                     "can withstand the allocation pressure when there is other potential work to do. ";
 
             tests.add(new DimensionalTest(baseOpts, org.openjdk.gcbench.retain.RefArray.class,
-                    "retain.array", groupDesc + "Retains an empty reference array of given size.",
+                    "retain.array", groupDesc + "Retains a reference array of given size.",
                     Dimensions.heapSize(Sequence.powersOfTwo_WithMax(HeapSizeManager.MIN_HEAP, HeapSizeManager.MAX_HEAP)),
                     Dimensions.size(Sequence.powersOfTen_Sub(100_000, 100_000_000))
             ));
 
             tests.add(new DimensionalTest(baseOpts, org.openjdk.gcbench.retain.LinkedLists.class,
-                    "retain.linkedlist", groupDesc + "Retains an empty linked list of given size.",
+                    "retain.linkedlist", groupDesc + "Retains a linked list of given size.",
                     Dimensions.heapSize(Sequence.powersOfTwo_WithMax(HeapSizeManager.MIN_HEAP, HeapSizeManager.MAX_HEAP)),
                     Dimensions.size(Sequence.powersOfTen_Sub(100_000, 100_000_000))
             ));
 
             tests.add(new DimensionalTest(baseOpts, org.openjdk.gcbench.retain.Tree.class,
-                    "retain.tree", groupDesc + "Retains an empty tree of given size.",
+                    "retain.tree", groupDesc + "Retains a tree of given size.",
+                    Dimensions.heapSize(Sequence.powersOfTwo_WithMax(HeapSizeManager.MIN_HEAP, HeapSizeManager.MAX_HEAP)),
+                    Dimensions.size(Sequence.powersOfTen_Sub(100_000, 100_000_000))
+            ));
+
+
+            tests.add(new DimensionalTest(baseOpts, org.openjdk.gcbench.retain.Tree.class,
+                    "retain.hashmap", groupDesc + "Retains a HashMap of given size.",
                     Dimensions.heapSize(Sequence.powersOfTwo_WithMax(HeapSizeManager.MIN_HEAP, HeapSizeManager.MAX_HEAP)),
                     Dimensions.size(Sequence.powersOfTen_Sub(100_000, 100_000_000))
             ));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/openjdk/gcbench/retain/HashMaps.java	Tue Jan 24 13:09:59 2017 +0100
@@ -0,0 +1,40 @@
+package org.openjdk.gcbench.retain;
+
+import org.openjdk.jmh.annotations.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+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 HashMaps {
+
+    Object retain;
+
+    @Param({"100000"})
+    private int size;
+
+    @Setup
+    public void setup() {
+        HashMap<Object, Object> map = new HashMap<>();
+        for (int c = 0; c < size; c++) {
+            Object o = new Object();
+            map.put(o, o);
+        }
+        retain = map;
+    }
+
+    @Benchmark
+    public Object test() {
+        // allocation pressure to trigger GCs
+        return new Object();
+    }
+
+}
--- a/src/main/java/org/openjdk/gcbench/retain/LinkedLists.java	Mon Jan 23 11:57:39 2017 +0100
+++ b/src/main/java/org/openjdk/gcbench/retain/LinkedLists.java	Tue Jan 24 13:09:59 2017 +0100
@@ -36,9 +36,11 @@
     }
 
     private static class Node {
-        Node next;
+        final Node next;
+        final Object payload;
         public Node(Node next) {
             this.next = next;
+            this.payload = new Object();
         }
     }
 
--- a/src/main/java/org/openjdk/gcbench/retain/RefArray.java	Mon Jan 23 11:57:39 2017 +0100
+++ b/src/main/java/org/openjdk/gcbench/retain/RefArray.java	Tue Jan 24 13:09:59 2017 +0100
@@ -15,14 +15,18 @@
 @State(Scope.Benchmark)
 public class RefArray {
 
-    Object[] retain;
+    Object retain;
 
     @Param({"100000"})
     private int size;
 
     @Setup
     public void setup() {
-        retain = new Object[size];
+        Object[] arr = new Object[size];
+        for (int c = 0; c < size; c++) {
+            arr[c] = new Object();
+        }
+        retain = arr;
     }
 
     @Benchmark
--- a/src/main/java/org/openjdk/gcbench/retain/Tree.java	Mon Jan 23 11:57:39 2017 +0100
+++ b/src/main/java/org/openjdk/gcbench/retain/Tree.java	Tue Jan 24 13:09:59 2017 +0100
@@ -52,9 +52,11 @@
     private static class Node {
         final Node left;
         final Node right;
+        final Object payload;
         public Node(Node left, Node right) {
             this.left = left;
             this.right = right;
+            this.payload = new Object();
         }
     }