# HG changeset patch # User mlarsson # Date 1412233265 -7200 # Thu Oct 02 09:01:05 2014 +0200 # Node ID 6bd07285f39421190fd75c6f1c33f4a9be92ff79 # Parent 6534c979ef0f37988f49cced407e09bcb7394fd9 [mq]: 8059527 diff --git a/src/share/vm/runtime/arguments.cpp b/src/share/vm/runtime/arguments.cpp --- a/src/share/vm/runtime/arguments.cpp +++ b/src/share/vm/runtime/arguments.cpp @@ -1690,11 +1690,11 @@ #ifdef COMPILER1 FastTLABRefill = false; #endif - FLAG_SET_DEFAULT(ParallelGCThreads, - Abstract_VM_Version::parallel_worker_threads()); + FLAG_SET_DEFAULT(ParallelGCThreads, Abstract_VM_Version::parallel_worker_threads()); if (ParallelGCThreads == 0) { - FLAG_SET_DEFAULT(ParallelGCThreads, - Abstract_VM_Version::parallel_worker_threads()); + assert(!FLAG_IS_DEFAULT(ParallelGCThreads), "The default value for ParallelGCThreads should not be 0."); + jio_fprintf(defaultStream::error_stream(), "The G1 GC can not be combined with -XX:ParallelGCThreads=0\n"); + vm_exit(1); } #if INCLUDE_ALL_GCS diff --git a/test/gc/arguments/TestParallelGCThreads.java b/test/gc/arguments/TestParallelGCThreads.java new file mode 100644 --- /dev/null +++ b/test/gc/arguments/TestParallelGCThreads.java @@ -0,0 +1,67 @@ +/* +* Copyright (c) 2014, 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. +*/ + +/* + * @test TestParallelGCThreads + * @key gc + * @bug 8059527 + * @summary Tests argument processing for ParallelGCThreads + * @library /testlibrary + * @build TestParallelGCThreads FlagsValue + * @run main/othervm TestParallelGCThreads + */ + +import com.oracle.java.testlibrary.*; + +public class TestParallelGCThreads { + + public static void main(String args[]) throws Exception { + + // For each parallel collector (G1, Parallel, ParNew/CMS) + for (String gc : new String[] {"G1", "Parallel", "ConcMarkSweep"}) { + + // Make sure the VM does not allow ParallelGCThreads set to 0 + String[] flags = new String[] {"-XX:+Use" + gc + "GC", "-XX:ParallelGCThreads=0", "-XX:+PrintFlagsFinal", "-version"}; + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(flags); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldHaveExitValue(1); + + // Do some basic testing to ensure the flag updates the count + for (long i = 1; i <= 3; i++) { + flags = new String[] {"-XX:+Use" + gc + "GC", "-XX:ParallelGCThreads=" + i, "-XX:+PrintFlagsFinal", "-version"}; + long count = getParallelGCThreadCount(flags); + if (count != i) { + throw new RuntimeException("Specifying ParallelGCThreads=" + i + " for " + gc + "GC does not set the thread count properly! Count found was " + count); + } + } + } + } + + public static long getParallelGCThreadCount(String flags[]) throws Exception { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(flags); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldHaveExitValue(0); + String stdout = output.getStdout(); + return FlagsValue.getFlagLongValue("ParallelGCThreads", stdout); + } +} # HG changeset patch # User mlarsson # Date 1412234971 -7200 # Thu Oct 02 09:29:31 2014 +0200 # Node ID 73108862db2c3071626ed6b2573e2e31bbd3cf75 # Parent 6bd07285f39421190fd75c6f1c33f4a9be92ff79 [mq]: review diff --git a/src/share/vm/runtime/arguments.cpp b/src/share/vm/runtime/arguments.cpp --- a/src/share/vm/runtime/arguments.cpp +++ b/src/share/vm/runtime/arguments.cpp @@ -1693,8 +1693,7 @@ FLAG_SET_DEFAULT(ParallelGCThreads, Abstract_VM_Version::parallel_worker_threads()); if (ParallelGCThreads == 0) { assert(!FLAG_IS_DEFAULT(ParallelGCThreads), "The default value for ParallelGCThreads should not be 0."); - jio_fprintf(defaultStream::error_stream(), "The G1 GC can not be combined with -XX:ParallelGCThreads=0\n"); - vm_exit(1); + vm_exit_during_initialization("The G1 GC can not be combined with -XX:ParallelGCThreads=0", NULL); } #if INCLUDE_ALL_GCS diff --git a/test/TEST.groups b/test/TEST.groups --- a/test/TEST.groups +++ b/test/TEST.groups @@ -229,6 +229,7 @@ gc/arguments/TestG1HeapSizeFlags.java \ gc/arguments/TestMaxHeapSizeTools.java \ gc/arguments/TestMaxNewSize.java \ + gc/arguments/TestParallelGCThreads.java \ gc/arguments/TestUseCompressedOopsErgo.java \ gc/class_unloading/TestG1ClassUnloadingHWM.java \ gc/g1/ \ @@ -256,6 +257,7 @@ gc/arguments/TestAlignmentToUseLargePages.java \ gc/arguments/TestMaxNewSize.java \ gc/arguments/TestMinInitialErgonomics.java \ + gc/arguments/TestParallelGCThreads.java \ gc/arguments/TestUseCompressedOopsErgo.java \ gc/metaspace/TestMetaspacePerfCounters.java \ gc/parallelScavenge/ \ @@ -270,6 +272,7 @@ gc/arguments/TestAlignmentToUseLargePages.java \ gc/arguments/TestCMSHeapSizeFlags.java \ gc/arguments/TestMaxNewSize.java \ + gc/arguments/TestParallelGCThreads.java \ gc/arguments/TestUseCompressedOopsErgo.java \ gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java \ gc/concurrentMarkSweep/ \ diff --git a/test/gc/arguments/TestParallelGCThreads.java b/test/gc/arguments/TestParallelGCThreads.java --- a/test/gc/arguments/TestParallelGCThreads.java +++ b/test/gc/arguments/TestParallelGCThreads.java @@ -27,8 +27,7 @@ * @bug 8059527 * @summary Tests argument processing for ParallelGCThreads * @library /testlibrary - * @build TestParallelGCThreads FlagsValue - * @run main/othervm TestParallelGCThreads + * @run driver TestParallelGCThreads */ import com.oracle.java.testlibrary.*; @@ -50,9 +49,7 @@ for (long i = 1; i <= 3; i++) { flags = new String[] {"-XX:+Use" + gc + "GC", "-XX:ParallelGCThreads=" + i, "-XX:+PrintFlagsFinal", "-version"}; long count = getParallelGCThreadCount(flags); - if (count != i) { - throw new RuntimeException("Specifying ParallelGCThreads=" + i + " for " + gc + "GC does not set the thread count properly! Count found was " + count); - } + Asserts.assertEQ(count, i, "Specifying ParallelGCThreads=" + i + " for " + gc + "GC does not set the thread count properly!"); } } }