# HG changeset patch # User asaha # Date 1460411901 25200 # Node ID d957cf0b00ac8c3285664206e2794356bfb84864 # Parent d109bda16490a29ffe12b162b542df33b7a1e5bc# Parent 448a5dcf414f69997d25a07da146a032b17bbe75 Merge diff -r d109bda16490 -r d957cf0b00ac .hgtags --- a/.hgtags Tue Apr 05 08:55:39 2016 -0700 +++ b/.hgtags Mon Apr 11 14:58:21 2016 -0700 @@ -850,3 +850,4 @@ d6c92b9e192ef97305a699e868387d55821c81ad jdk8u102-b00 d6c92b9e192ef97305a699e868387d55821c81ad jdk8u82-b00 516a64e6d7c2dc29fd932bf3b8313e560a01bcd0 jdk8u102-b01 +83dc7e55f71596e6e76fabfa56b6008e070ff44c jdk8u102-b02 diff -r d109bda16490 -r d957cf0b00ac src/share/vm/gc_implementation/g1/heapRegion.cpp --- a/src/share/vm/gc_implementation/g1/heapRegion.cpp Tue Apr 05 08:55:39 2016 -0700 +++ b/src/share/vm/gc_implementation/g1/heapRegion.cpp Mon Apr 11 14:58:21 2016 -0700 @@ -794,7 +794,9 @@ "in region "HR_FORMAT, (void*) obj, HR_FORMAT_PARAMS(to)); - obj->print_on(gclog_or_tty); + if (obj->is_oop()) { + obj->print_on(gclog_or_tty); + } gclog_or_tty->print_cr("Obj head CTE = %d, field CTE = %d.", cv_obj, cv_field); gclog_or_tty->print_cr("----------"); diff -r d109bda16490 -r d957cf0b00ac src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp --- a/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp Tue Apr 05 08:55:39 2016 -0700 +++ b/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp Mon Apr 11 14:58:21 2016 -0700 @@ -193,8 +193,9 @@ (!FLAG_IS_DEFAULT(ParallelGCThreads) && !ForceDynamicNumberOfGCThreads)) { new_active_workers = total_workers; } else { + uintx min_workers = (total_workers == 1) ? 1 : 2; new_active_workers = calc_default_active_workers(total_workers, - 2, /* Minimum number of workers */ + min_workers, active_workers, application_workers); } diff -r d109bda16490 -r d957cf0b00ac src/share/vm/runtime/arguments.cpp --- a/src/share/vm/runtime/arguments.cpp Tue Apr 05 08:55:39 2016 -0700 +++ b/src/share/vm/runtime/arguments.cpp Mon Apr 11 14:58:21 2016 -0700 @@ -1675,9 +1675,8 @@ FLAG_SET_DEFAULT(ParallelGCThreads, Abstract_VM_Version::parallel_worker_threads()); if (ParallelGCThreads == 0) { - FLAG_SET_DEFAULT(ParallelGCThreads, - Abstract_VM_Version::parallel_worker_threads()); - } + vm_exit_during_initialization("The flag -XX:+UseG1GC can not be combined with -XX:ParallelGCThreads=0", NULL); + } #if INCLUDE_ALL_GCS if (G1ConcRefinementThreads == 0) { diff -r d109bda16490 -r d957cf0b00ac test/TEST.groups --- a/test/TEST.groups Tue Apr 05 08:55:39 2016 -0700 +++ b/test/TEST.groups Mon Apr 11 14:58:21 2016 -0700 @@ -61,7 +61,6 @@ # can be resolved in some cases by using tools from the compile-jdk. # needs_jdk = \ - gc/TestG1ZeroPGCTJcmdThreadPrint.java \ gc/metaspace/CompressedClassSpaceSizeInJmapHeap.java \ gc/metaspace/TestMetaspacePerfCounters.java \ gc/metaspace/TestPerfCountersAndMemoryPools.java \ @@ -216,6 +215,7 @@ runtime/NMT \ gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java \ gc/class_unloading/TestG1ClassUnloadingHWM.java \ + gc/ergonomics/TestDynamicNumberOfGCThreads.java \ gc/g1/TestRegionAlignment.java \ gc/g1/TestShrinkToOneRegion.java \ gc/metaspace/G1AddMetaspaceDependency.java \ diff -r d109bda16490 -r d957cf0b00ac test/gc/8000311/Test8000311.java --- a/test/gc/8000311/Test8000311.java Tue Apr 05 08:55:39 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2013, 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 Test8000311 - * @key gc - * @bug 8000311 - * @summary G1: ParallelGCThreads==0 broken - * @run main/othervm -XX:+UseG1GC -XX:ParallelGCThreads=0 -XX:+ResizePLAB -XX:+ExplicitGCInvokesConcurrent Test8000311 - * @author filipp.zhinkin@oracle.com - */ - -import java.util.*; - -public class Test8000311 { - public static void main(String args[]) { - for(int i = 0; i<100; i++) { - byte[] garbage = new byte[1000]; - System.gc(); - } - } -} diff -r d109bda16490 -r d957cf0b00ac test/gc/TestG1ZeroPGCTJcmdThreadPrint.java --- a/test/gc/TestG1ZeroPGCTJcmdThreadPrint.java Tue Apr 05 08:55:39 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2013, 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 TestG1ZeroPGCTJcmdThreadPrint - * @key gc - * @bug 8005875 - * @summary Use jcmd to generate a thread dump of a Java program being run with PGCT=0 to verify 8005875 - * @library /testlibrary - * @run main/othervm -XX:+UseG1GC -XX:ParallelGCThreads=0 -XX:+IgnoreUnrecognizedVMOptions TestG1ZeroPGCTJcmdThreadPrint - */ - -import com.oracle.java.testlibrary.*; - -public class TestG1ZeroPGCTJcmdThreadPrint { - public static void main(String args[]) throws Exception { - - // Grab the pid from the current java process - String pid = Integer.toString(ProcessTools.getProcessId()); - - // Create a ProcessBuilder - ProcessBuilder pb = new ProcessBuilder(); - - // Run jcmd Thread.print - pb.command(JDKToolFinder.getJDKTool("jcmd"), pid, "Thread.print"); - - OutputAnalyzer output = new OutputAnalyzer(pb.start()); - - // There shouldn't be a work gang for concurrent marking. - output.shouldNotContain("G1 Parallel Marking Threads"); - - // Make sure we didn't crash - output.shouldHaveExitValue(0); - } -} diff -r d109bda16490 -r d957cf0b00ac test/gc/ergonomics/TestDynamicNumberOfGCThreads.java --- a/test/gc/ergonomics/TestDynamicNumberOfGCThreads.java Tue Apr 05 08:55:39 2016 -0700 +++ b/test/gc/ergonomics/TestDynamicNumberOfGCThreads.java Mon Apr 11 14:58:21 2016 -0700 @@ -44,14 +44,24 @@ } private static void verifyDynamicNumberOfGCThreads(OutputAnalyzer output) { + output.shouldHaveExitValue(0); // test should run succesfully output.shouldContain("new_active_workers"); - output.shouldHaveExitValue(0); } private static void testDynamicNumberOfGCThreads(String gcFlag) throws Exception { // UseDynamicNumberOfGCThreads and TraceDynamicGCThreads enabled - ProcessBuilder pb_enabled = - ProcessTools.createJavaProcessBuilder("-XX:+" + gcFlag, "-Xmx10M", "-XX:+PrintGCDetails", "-XX:+UseDynamicNumberOfGCThreads", "-XX:+TraceDynamicGCThreads", GCTest.class.getName()); + String[] baseArgs = {"-XX:+" + gcFlag, "-Xmx10M", "-XX:+PrintGCDetails", "-XX:+UseDynamicNumberOfGCThreads", "-XX:+TraceDynamicGCThreads", GCTest.class.getName()}; + + // Base test with gc and +UseDynamicNumberOfGCThreads: + ProcessBuilder pb_enabled = ProcessTools.createJavaProcessBuilder(baseArgs); + verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start())); + + // Ensure it also works on uniprocessors or if user specifies -XX:ParallelGCThreads=1: + String[] extraArgs = {"-XX:+UnlockDiagnosticVMOptions", "-XX:+ForceDynamicNumberOfGCThreads", "-XX:ParallelGCThreads=1"}; + String[] finalArgs = new String[baseArgs.length + extraArgs.length]; + System.arraycopy(extraArgs, 0, finalArgs, 0, extraArgs.length); + System.arraycopy(baseArgs, 0, finalArgs, extraArgs.length, baseArgs.length); + pb_enabled = ProcessTools.createJavaProcessBuilder(finalArgs); verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start())); }