Support -XX:+UseNoGC as the alias for -XX:+UseEpsilonGC epsilon-gc-branch
authorshade
Thu, 18 Jan 2018 12:08:41 +0100
branchepsilon-gc-branch
changeset 56022 dd005db4ec5c
parent 56021 864ee22719af
child 56028 267a6ce379ba
Support -XX:+UseNoGC as the alias for -XX:+UseEpsilonGC
src/hotspot/share/gc/epsilon/epsilonArguments.cpp
src/hotspot/share/gc/shared/gcArguments.cpp
src/hotspot/share/runtime/arguments.cpp
src/hotspot/share/runtime/globals.hpp
test/hotspot/jtreg/gc/epsilon/TestEpsilonEnabledNoGC.java
--- a/src/hotspot/share/gc/epsilon/epsilonArguments.cpp	Thu Jan 18 11:43:21 2018 +0100
+++ b/src/hotspot/share/gc/epsilon/epsilonArguments.cpp	Thu Jan 18 12:08:41 2018 +0100
@@ -38,7 +38,14 @@
 void EpsilonArguments::initialize_flags() {
   GCArguments::initialize_flags();
 
-  assert(UseEpsilonGC, "Error");
+  assert(UseEpsilonGC || UseNoGC, "Error");
+
+  // UseNoGC is the alias, drop and replace it with the a single option:
+  // the rest of the code can use UseEpsilonGC then.
+  if (UseNoGC) {
+    FLAG_SET_DEFAULT(UseEpsilonGC, true);
+    FLAG_SET_DEFAULT(UseNoGC, false);
+  }
 
   // Forcefully exit when OOME is detected. Nothing we can do at that point.
   if (FLAG_IS_DEFAULT(ExitOnOutOfMemoryError)) {
--- a/src/hotspot/share/gc/shared/gcArguments.cpp	Thu Jan 18 11:43:21 2018 +0100
+++ b/src/hotspot/share/gc/shared/gcArguments.cpp	Thu Jan 18 12:08:41 2018 +0100
@@ -55,7 +55,7 @@
 
 bool GCArguments::gc_selected() {
 #if INCLUDE_ALL_GCS
-  return UseSerialGC || UseParallelGC || UseParallelOldGC || UseConcMarkSweepGC || UseG1GC || UseEpsilonGC;
+  return UseSerialGC || UseParallelGC || UseParallelOldGC || UseConcMarkSweepGC || UseG1GC || (UseEpsilonGC || UseNoGC);
 #else
   return UseSerialGC;
 #endif // INCLUDE_ALL_GCS
@@ -147,7 +147,7 @@
     _instance = new G1Arguments();
   } else if (UseConcMarkSweepGC) {
     _instance = new CMSArguments();
-  } else if (UseEpsilonGC) {
+  } else if (UseEpsilonGC || UseNoGC) {
     _instance = new EpsilonArguments();
 #endif
   } else if (UseSerialGC) {
--- a/src/hotspot/share/runtime/arguments.cpp	Thu Jan 18 11:43:21 2018 +0100
+++ b/src/hotspot/share/runtime/arguments.cpp	Thu Jan 18 12:08:41 2018 +0100
@@ -2192,6 +2192,7 @@
   if (UseConcMarkSweepGC)                i++;
   if (UseParallelGC || UseParallelOldGC) i++;
   if (UseG1GC)                           i++;
+  if (UseNoGC)                           i++;
   if (UseEpsilonGC)                      i++;
   if (i > 1) {
     jio_fprintf(defaultStream::error_stream(),
--- a/src/hotspot/share/runtime/globals.hpp	Thu Jan 18 11:43:21 2018 +0100
+++ b/src/hotspot/share/runtime/globals.hpp	Thu Jan 18 12:08:41 2018 +0100
@@ -1420,7 +1420,10 @@
           "Use the Parallel Old garbage collector")                         \
                                                                             \
   develop(bool, UseEpsilonGC, false,                                        \
-          "Use the Epsilon garbage collector")                              \
+          "Use the Epsilon (no-op) garbage collector")                      \
+                                                                            \
+  develop(bool, UseNoGC, false,                                             \
+          "Use the Epsilon (no-op) garbage collector")                      \
                                                                             \
   product(uintx, HeapMaximumCompactionInterval, 20,                         \
           "How often should we maximally compact the heap (not allowing "   \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/gc/epsilon/TestEpsilonEnabledNoGC.java	Thu Jan 18 12:08:41 2018 +0100
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2018, Red Hat, Inc. and/or its affiliates.
+ * 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.
+ */
+
+/**
+ * @test TestAlwaysPretouch
+ * @library /test/lib
+ * @summary Basic sanity test for Epsilon
+ * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+IgnoreUnrecognizedVMOptions -XX:+UseNoGC TestEpsilonEnabled
+ */
+
+import jdk.test.lib.Platform;
+
+public class TestEpsilonEnabled extends AbstractEpsilonTest {
+  public static void main(String[] args) throws Exception {
+    if (Platform.isDebugBuild() && !isEpsilonEnabled()) {
+      throw new IllegalStateException("Debug builds should have Epsilon enabled");
+    }
+    if (!Platform.isDebugBuild() && isEpsilonEnabled()) {
+      throw new IllegalStateException("Non-debug builds should have Epsilon disabled");
+    }
+  }
+}