Summary

To better control heap memory allocations, three existing flags based on fractions, 1/N for a provided value of N, are deprecated (XX:MaxRAMFraction=xxx, XX:MinRAMFaction=xxx and XX:InitialRAMFraction=xxx) and three new flags based on percentages, from 0.0 to 100.0, are being introduced (XX:MaxRAMPercentage XX:MinRAMPercentage and XX:InitialRAMPercentage).
Problem

Using the XX:MaxRAMFraction options, we can only set fractional values 1/2, 1/3, 1/4 etc. Customers would like the ability to select larger amounts beyond 1/2 of available RAM. This can be accomplished by setting hard coded amounts using Xmx but the requesting customer would like this value to be based on the amount of available memory. In the case where 60% of available host RAM is desired the user would like a flag which would allow them to specify 60.
Solution

Deprecate three existing Hotspot flags XX:MaxRAMFraction=xxx, XX:MinRAMFaction=xxx and XX:InitialRAMFraction=xxx) and add three new flags (XX:MaxRAMPercentage XX:MinRAMPercentage and XX:InitialRAMPercentage) which allow floating point values to be used to specify the percentage of available host memory to be used for Max, Min and Initial Heap sizes.
Specification

Here is my proposed patch for the flag name changes:
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. "
+ "Deprecated, use MinRAMPercentage instead")
+ range(1, max_uintx)
+
+ product(uintx, InitialRAMFraction, 64,
+ "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(1, max_uintx)

 product(uintx, InitialRAMFraction, 64,
 "Fraction (1/n) of real memory used for initial heap size")
 range(1, max_uintx)
+ range(0.0, 100.0)
+
+ product(double, InitialRAMPercentage, 1.5625,
+ "Percentage of real memory used for initial heap size")
+ range(0.0, 100.0)
The new flags, if specified, will override the deprecated older flags.