--- old/make/RunTests.gmk 2017-08-28 10:31:24.673727354 -0400 +++ new/make/RunTests.gmk 2017-08-28 10:31:23.457657683 -0400 @@ -328,9 +328,9 @@ $1_JTREG_JOBS := 50 endif - # Make sure MaxRAMFraction is high enough to not cause OOM or swapping since + # Make sure MaxRAMPercentage is high enough to not cause OOM or swapping since # we may end up with a lot of JVM's - $1_JTREG_MAX_RAM_FRACTION := $$(shell $$(EXPR) $$($1_JTREG_JOBS) \* 4) + $1_JTREG_MAX_RAM_PERCENTAGE := $$(shell $$(EXPR) 25 / $$($1_JTREG_JOBS)) JTREG_TIMEOUT ?= 4 JTREG_VERBOSE ?= fail,error,summary @@ -344,7 +344,7 @@ $1_JTREG_BASIC_OPTIONS += -$$($1_JTREG_TEST_MODE) \ -verbose:$$(JTREG_VERBOSE) -retain:$$(JTREG_RETAIN) \ -concurrency:$$($1_JTREG_JOBS) -timeoutFactor:$$(JTREG_TIMEOUT) \ - -vmoption:-XX:MaxRAMFraction=$$($1_JTREG_MAX_RAM_FRACTION) + -vmoption:-XX:MaxRAMPercentage=$$($1_JTREG_MAX_RAM_PERCENTAGE) $1_JTREG_BASIC_OPTIONS += -automatic -keywords:\!ignore -ignore:quiet --- old/hotspot/src/share/vm/runtime/arguments.cpp 2017-08-28 10:31:28.465944618 -0400 +++ new/hotspot/src/share/vm/runtime/arguments.cpp 2017-08-28 10:31:27.189871509 -0400 @@ -379,6 +379,9 @@ { "MaxGCMinorPauseMillis", JDK_Version::jdk(8), JDK_Version::undefined(), JDK_Version::undefined() }, { "UseConcMarkSweepGC", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() }, { "MonitorInUseLists", JDK_Version::jdk(10),JDK_Version::undefined(), JDK_Version::undefined() }, + { "MaxRAMFraction", JDK_Version::jdk(10), JDK_Version::undefined(), JDK_Version::undefined() }, + { "MinRAMFraction", JDK_Version::jdk(10), JDK_Version::undefined(), JDK_Version::undefined() }, + { "InitialRAMFraction", JDK_Version::jdk(10), JDK_Version::undefined(), JDK_Version::undefined() }, // --- Deprecated alias flags (see also aliased_jvm_flags) - sorted by obsolete_in then expired_in: { "DefaultMaxRAMFraction", JDK_Version::jdk(8), JDK_Version::undefined(), JDK_Version::undefined() }, @@ -2069,20 +2072,33 @@ } } + // Convert deprecated flags + if (FLAG_IS_DEFAULT(MaxRAMPercentage) && + !FLAG_IS_DEFAULT(MaxRAMFraction)) + MaxRAMPercentage = 100.0 / MaxRAMFraction; + + if (FLAG_IS_DEFAULT(MinRAMPercentage) && + !FLAG_IS_DEFAULT(MinRAMFraction)) + MinRAMPercentage = 100.0 / MinRAMFraction; + + if (FLAG_IS_DEFAULT(InitialRAMPercentage) && + !FLAG_IS_DEFAULT(InitialRAMFraction)) + InitialRAMPercentage = 100.0 / InitialRAMFraction; + // If the maximum heap size has not been set with -Xmx, // then set it as fraction of the size of physical memory, // respecting the maximum and minimum sizes of the heap. if (FLAG_IS_DEFAULT(MaxHeapSize)) { - julong reasonable_max = phys_mem / MaxRAMFraction; - - if (phys_mem <= MaxHeapSize * MinRAMFraction) { + julong reasonable_max = (julong)((phys_mem * MaxRAMPercentage) / 100); + if (phys_mem <= (julong)((MaxHeapSize * MinRAMPercentage) / 100)) { // Small physical memory, so use a minimum fraction of it for the heap - reasonable_max = phys_mem / MinRAMFraction; + reasonable_max = (julong)((phys_mem * MinRAMPercentage) / 100); } else { // Not-small physical memory, so require a heap at least // as large as MaxHeapSize reasonable_max = MAX2(reasonable_max, (julong)MaxHeapSize); } + if (!FLAG_IS_DEFAULT(ErgoHeapSizeLimit) && ErgoHeapSizeLimit != 0) { // Limit the heap size to ErgoHeapSizeLimit reasonable_max = MIN2(reasonable_max, (julong)ErgoHeapSizeLimit); @@ -2135,7 +2151,7 @@ reasonable_minimum = limit_by_allocatable_memory(reasonable_minimum); if (InitialHeapSize == 0) { - julong reasonable_initial = phys_mem / InitialRAMFraction; + julong reasonable_initial = (julong)((phys_mem * InitialRAMPercentage) / 100); reasonable_initial = MAX3(reasonable_initial, reasonable_minimum, (julong)min_heap_size()); reasonable_initial = MIN2(reasonable_initial, (julong)MaxHeapSize); --- old/hotspot/src/share/vm/runtime/globals.hpp 2017-08-28 10:31:32.338166465 -0400 +++ new/hotspot/src/share/vm/runtime/globals.hpp 2017-08-28 10:31:31.058093127 -0400 @@ -2040,7 +2040,7 @@ \ product(size_t, ErgoHeapSizeLimit, 0, \ "Maximum ergonomically set heap size (in bytes); zero means use " \ - "MaxRAM / MaxRAMFraction") \ + "MaxRAM * MaxRAMPercentage / 100") \ range(0, max_uintx) \ \ experimental(bool, UseCGroupMemoryLimitForHeap, false, \ @@ -2049,18 +2049,34 @@ \ product(uintx, MaxRAMFraction, 4, \ "Maximum fraction (1/n) of real memory used for maximum heap " \ - "size") \ + "size. " \ + "Deprecated, use MaxRAMPercentage instead") \ range(1, max_uintx) \ \ product(uintx, MinRAMFraction, 2, \ "Minimum fraction (1/n) of real memory used for maximum heap " \ - "size on systems with small physical memory size") \ + "size on systems with small physical memory size. " \ + "Deprecated, use MinRAMPercentage instead") \ range(1, max_uintx) \ \ product(uintx, InitialRAMFraction, 64, \ - "Fraction (1/n) of real memory used for initial heap size") \ + "Fraction (1/n) of real memory used for initial heap size. " \ + "Deprecated, use InitialRAMPercentage instead") \ range(1, max_uintx) \ \ + product(double, MaxRAMPercentage, 25.0, \ + "Maximum percentage of real memory used for maximum heap size") \ + range(0.0, 100.0) \ + \ + product(double, MinRAMPercentage, 50.0, \ + "Minimum percentage of real memory used for maximum heap" \ + "size on systems with small physical memory size") \ + range(0.0, 100.0) \ + \ + product(double, InitialRAMPercentage, 1.5625, \ + "Percentage of real memory used for initial heap size") \ + range(0.0, 100.0) \ + \ develop(uintx, MaxVirtMemFraction, 2, \ "Maximum fraction (1/n) of virtual memory used for ergonomically "\ "determining maximum heap size") \ --- old/hotspot/test/Makefile 2017-08-28 10:31:36.478403668 -0400 +++ new/hotspot/test/Makefile 2017-08-28 10:31:35.206330788 -0400 @@ -70,8 +70,8 @@ CONCURRENCY := 12 endif -# Make sure MaxRAMFraction is high enough to not cause OOM or swapping since we may end up with a lot of JVM's -JTREG_BASIC_OPTIONS += -vmoption:-XX:MaxRAMFraction=$(shell expr $(CONCURRENCY) \* 4) +# Make sure MaxRAMPercentage is high enough to not cause OOM or swapping since we may end up with a lot of JVM's +JTREG_BASIC_OPTIONS += -vmoption:-XX:MaxRAMPercentage=$(shell expr 25 / $(CONCURRENCY)) # Include the common base file with most of the logic include ../../test/TestCommon.gmk --- old/hotspot/test/runtime/CommandLine/FlagWithInvalidValue.java 2017-08-28 10:31:40.342625057 -0400 +++ new/hotspot/test/runtime/CommandLine/FlagWithInvalidValue.java 2017-08-28 10:31:39.022549427 -0400 @@ -36,10 +36,10 @@ public class FlagWithInvalidValue { public static void main(String[] args) throws Exception { ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( - "-XX:MaxRAMFraction=v", "-version"); + "-XX:MaxRAMPercentage=v", "-version"); OutputAnalyzer output = new OutputAnalyzer(pb.start()); - output.shouldContain("Improperly specified VM option 'MaxRAMFraction=v'"); + output.shouldContain("Improperly specified VM option 'MaxRAMPercentage=v'"); output.shouldHaveExitValue(1); } } --- old/hotspot/test/runtime/CommandLine/NonBooleanFlagWithInvalidBooleanPrefix.java 2017-08-28 10:31:44.226847593 -0400 +++ new/hotspot/test/runtime/CommandLine/NonBooleanFlagWithInvalidBooleanPrefix.java 2017-08-28 10:31:42.950774484 -0400 @@ -36,17 +36,17 @@ public class NonBooleanFlagWithInvalidBooleanPrefix { public static void main(String[] args) throws Exception { ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( - "-XX:-MaxRAMFraction=16", "-version"); + "-XX:-MaxRAMPercentage=1", "-version"); OutputAnalyzer output = new OutputAnalyzer(pb.start()); - output.shouldContain("Unexpected +/- setting in VM option 'MaxRAMFraction=16'"); + output.shouldContain("Unexpected +/- setting in VM option 'MaxRAMPercentage=1'"); output.shouldHaveExitValue(1); pb = ProcessTools.createJavaProcessBuilder( - "-XX:+MaxRAMFraction=16", "-version"); + "-XX:+MaxRAMPercentage=1", "-version"); output = new OutputAnalyzer(pb.start()); - output.shouldContain("Unexpected +/- setting in VM option 'MaxRAMFraction=16'"); + output.shouldContain("Unexpected +/- setting in VM option 'MaxRAMPercentage=1'"); output.shouldHaveExitValue(1); } --- old/hotspot/test/runtime/CommandLine/VMDeprecatedOptions.java 2017-08-28 10:31:48.039066003 -0400 +++ new/hotspot/test/runtime/CommandLine/VMDeprecatedOptions.java 2017-08-28 10:31:46.766993124 -0400 @@ -43,6 +43,9 @@ {"MaxGCMinorPauseMillis", "1032"}, {"MustCallLoadClassInternal", "false"}, {"UnsyncloadClass", "false"}, + {"MaxRAMFraction", "8"}, + {"MinRAMFraction", "2"}, + {"InitialRAMFraction", "64"}, // deprecated alias flags (see also aliased_jvm_flags): {"DefaultMaxRAMFraction", "4"},