diff --git a/src/share/vm/runtime/arguments.cpp b/src/share/vm/runtime/arguments.cpp index 23530bf8bc43bb230022e7e9fe66ed0d41783481..dd4109226a9771d9b38554259264497ba97a4a00 100644 --- a/src/share/vm/runtime/arguments.cpp +++ b/src/share/vm/runtime/arguments.cpp @@ -3044,6 +3044,11 @@ jint Arguments::finalize_vm_init_args(SysClassPath* scp_p, bool scp_assembly_req set_mode_flags(_int); } + // eventually fix up InitialTenuringThreshold if only MaxTenuringThreshold is set + if (FLAG_IS_DEFAULT(InitialTenuringThreshold) && (InitialTenuringThreshold > MaxTenuringThreshold)) { + FLAG_SET_ERGO(uintx, InitialTenuringThreshold, MaxTenuringThreshold); + } + #ifndef COMPILER2 // Don't degrade server performance for footprint if (FLAG_IS_DEFAULT(UseLargePages) && diff --git a/test/gc/arguments/TestInitialTenuringThreshold.java b/test/gc/arguments/TestInitialTenuringThreshold.java new file mode 100644 index 0000000000000000000000000000000000000000..2c97ccd8fff17237d784d21e559ab8cd4b40f652 --- /dev/null +++ b/test/gc/arguments/TestInitialTenuringThreshold.java @@ -0,0 +1,75 @@ +/* +* 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 TestInitialTenuringThreshold + * @key gc + * @bug 8014765 + * @summary Tests argument processing for initial tenuring threshold + * @library /testlibrary + * @run main/othervm TestInitialTenuringThreshold + * @author thomas.schatzl@oracle.com + */ + +import com.oracle.java.testlibrary.*; + +public class TestInitialTenuringThreshold { + + public static void runWithThresholds(int initial, int max, boolean shouldfail) throws Exception { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + "-XX:InitialTenuringThreshold=" + String.valueOf(initial), + "-XX:MaxTenuringThreshold=" + String.valueOf(max), + "-version" + ); + + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + if (shouldfail) { + output.shouldHaveExitValue(1); + } else { + output.shouldHaveExitValue(0); + } + } + + + public static void main(String args[]) throws Exception { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + // some value below the default value of InitialTenuringThreshold of 7 + "-XX:MaxTenuringThreshold=1", + "-version" + ); + + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldHaveExitValue(0); + // successful tests + runWithThresholds(0, 10, false); + runWithThresholds(5, 5, false); + // failing tests + runWithThresholds(10, 0, true); + runWithThresholds(9, 8, true); + runWithThresholds(-1, 8, true); + runWithThresholds(8, -1, true); + runWithThresholds(8, 16, true); + runWithThresholds(16, 8, true); + } +} +