changeset 18892:886621ee9bdb

Microbenchmark for partial escape analysis.
author Roland Schatz <roland.schatz@oracle.com>
date Wed, 21 Jan 2015 15:44:30 +0100
parents 9afee75cee46
children 8e8b4a6a85f5
files graal/com.oracle.graal.virtual.bench/src/com/oracle/graal/virtual/bench/PartialEscapeBench.java mx/suite.py
diffstat 2 files changed, 67 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.graal.virtual.bench/src/com/oracle/graal/virtual/bench/PartialEscapeBench.java	Wed Jan 21 15:44:30 2015 +0100
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2015, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.graal.virtual.bench;
+
+import org.openjdk.jmh.annotations.*;
+
+public class PartialEscapeBench {
+
+    private static class Thing {
+        final int id;
+        final String name;
+
+        Thing(int id, String name) {
+            this.id = id;
+            this.name = name;
+        }
+    }
+
+    @State(Scope.Thread)
+    public static class ThingsCache {
+
+        private Thing[] cache = new Thing[100];
+
+        public Thing getOrAdd(Thing input) {
+            if (cache[input.id] == null) {
+                cache[input.id] = input;
+            }
+            return cache[input.id];
+        }
+    }
+
+    @Benchmark
+    @Warmup(iterations = 30)
+    public String benchPartialEscape(ThingsCache cache) {
+        Thing thing = cache.getOrAdd(new Thing(42, "the answer!"));
+        return thing.name;
+    }
+}
--- a/mx/suite.py	Wed Jan 21 14:49:13 2015 +0100
+++ b/mx/suite.py	Wed Jan 21 15:44:30 2015 +0100
@@ -747,6 +747,15 @@
       "workingSets" : "Graal,Phases",
     },
 
+    "com.oracle.graal.virtual.bench" : {
+      "subDir" : "graal",
+      "sourceDirs" : ["src"],
+      "dependencies" : ["JMH"],
+      "checkstyle" : "com.oracle.graal.graph",
+      "javaCompliance" : "1.8",
+      "workingSets" : "Graal,Bench",
+    },
+
     "com.oracle.graal.loop" : {
       "subDir" : "graal",
       "sourceDirs" : ["src"],