changeset 971:da3df85c0bcd

Merge
author phh
date Thu, 12 Nov 2009 15:25:37 -0800
parents 6571190a0304 (current diff) 0ad684e27697 (diff)
children 54d471e8741d
files
diffstat 1 files changed, 10 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/runtime/arguments.cpp	Thu Nov 12 14:27:25 2009 -0800
+++ b/src/share/vm/runtime/arguments.cpp	Thu Nov 12 15:25:37 2009 -0800
@@ -1373,13 +1373,19 @@
     FLAG_SET_ERGO(uintx, MaxHeapSize, (uintx)reasonable_max);
   }
 
-  // If the initial_heap_size has not been set with InitialHeapSize,
+  // If the initial_heap_size has not been set with InitialHeapSize
   // 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);
@@ -1387,14 +1393,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);
   }
 }