src/share/vm/runtime/arguments.cpp
Print this page
@@ -1544,10 +1544,19 @@
MarkStackSize / K, MarkStackSizeMax / K);
tty->print_cr("ConcGCThreads: %u", ConcGCThreads);
}
}
+julong Arguments::limit_by_allocatable_memory(julong limit) {
+ julong max_allocatable;
+ julong result = limit;
+ if (os::has_allocatable_memory_limit(&max_allocatable)) {
+ result = MIN2(result, max_allocatable / MaxVirtMemFraction);
+ }
+ return result;
+}
+
void Arguments::set_heap_size() {
if (!FLAG_IS_DEFAULT(DefaultMaxRAMFraction)) {
// Deprecated flag
FLAG_SET_CMDLINE(uintx, MaxRAMFraction, DefaultMaxRAMFraction);
}
@@ -1582,16 +1591,16 @@
// but it should be not less than default MaxHeapSize.
max_coop_heap -= HeapBaseMinAddress;
}
reasonable_max = MIN2(reasonable_max, max_coop_heap);
}
- reasonable_max = os::allocatable_physical_memory(reasonable_max);
+ reasonable_max = limit_by_allocatable_memory(reasonable_max);
if (!FLAG_IS_DEFAULT(InitialHeapSize)) {
// An initial heap size was specified on the command line,
// so be sure that the maximum size is consistent. Done
- // after call to allocatable_physical_memory because that
+ // after call to limit_by_allocatable_memory because that
// method might reduce the allocation size.
reasonable_max = MAX2(reasonable_max, (julong)InitialHeapSize);
}
if (PrintGCDetails && Verbose) {
@@ -1607,18 +1616,18 @@
if (FLAG_IS_DEFAULT(InitialHeapSize)) {
julong reasonable_minimum = (julong)(OldSize + NewSize);
reasonable_minimum = MIN2(reasonable_minimum, (julong)MaxHeapSize);
- reasonable_minimum = os::allocatable_physical_memory(reasonable_minimum);
+ reasonable_minimum = limit_by_allocatable_memory(reasonable_minimum);
julong reasonable_initial = phys_mem / InitialRAMFraction;
reasonable_initial = MAX2(reasonable_initial, reasonable_minimum);
reasonable_initial = MIN2(reasonable_initial, (julong)MaxHeapSize);
- reasonable_initial = os::allocatable_physical_memory(reasonable_initial);
+ reasonable_initial = limit_by_allocatable_memory(reasonable_initial);
if (PrintGCDetails && Verbose) {
// Cannot use gclog_or_tty yet.
tty->print_cr(" Initial heap size " SIZE_FORMAT, (uintx)reasonable_initial);
tty->print_cr(" Minimum heap size " SIZE_FORMAT, (uintx)reasonable_minimum);
@@ -2593,13 +2602,11 @@
// is turned on below, the actual space used may be smaller.
initHeapSize = MIN2(total_memory / (julong)2,
total_memory - (julong)160*M);
- // Make sure that if we have a lot of memory we cap the 32 bit
- // process space. The 64bit VM version of this function is a nop.
- initHeapSize = os::allocatable_physical_memory(initHeapSize);
+ initHeapSize = limit_by_allocatable_memory(initHeapSize);
if (FLAG_IS_DEFAULT(MaxHeapSize)) {
FLAG_SET_CMDLINE(uintx, MaxHeapSize, initHeapSize);
FLAG_SET_CMDLINE(uintx, InitialHeapSize, initHeapSize);
// Currently the minimum size and the initial heap sizes are the same.