OpenJDK / jdk / jdk
changeset 4444:877bb3341a10
6900899: vm fails to start when -Xmx value is less than OldSize + NewSize
Summary: Set minimum heap size to min(OldSize + NewSize, MaxHeapSize) in Arguments::set_heap_size().
Reviewed-by: kvn, ysr, tonyp
author | phh |
---|---|
date | Fri, 20 Nov 2009 16:22:38 -0500 |
parents | dfe376b4f7df |
children | 73f83d9d3e9c |
files | hotspot/src/share/vm/runtime/arguments.cpp |
diffstat | 1 files changed, 9 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/hotspot/src/share/vm/runtime/arguments.cpp Wed Nov 11 09:13:12 2009 -0500 +++ b/hotspot/src/share/vm/runtime/arguments.cpp Fri Nov 20 16:22:38 2009 -0500 @@ -1378,9 +1378,15 @@ // or -Xms, then set it as fraction of the size of physical memory, // respecting the maximum and minimum sizes of the heap. 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); + julong reasonable_initial = phys_mem / InitialRAMFraction; - reasonable_initial = MAX2(reasonable_initial, (julong)(OldSize + NewSize)); + reasonable_initial = MAX2(reasonable_initial, reasonable_minimum); reasonable_initial = MIN2(reasonable_initial, (julong)MaxHeapSize); reasonable_initial = os::allocatable_physical_memory(reasonable_initial); @@ -1388,14 +1394,10 @@ 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); } FLAG_SET_ERGO(uintx, InitialHeapSize, (uintx)reasonable_initial); - - // Subsequent ergonomics code may expect min_heap_size to be set - // if InitialHeapSize is. Use whatever the current values are - // for OldSize and NewSize, whether or not they were set on the - // command line. - set_min_heap_size(OldSize + NewSize); + set_min_heap_size((uintx)reasonable_minimum); } }