jdk8/jdk8/hotspot: 754c24457b20 (original) (raw)

OpenJDK / jdk8 / jdk8 / hotspot

changeset 4419:754c24457b20

7112912: Message "Error occurred during initialization of VM" on boxes with lots of RAM Summary: Ergonomics now also takes available virtual memory into account when deciding for a heap size. The helper method to determine the maximum allocatable memory block now uses the appropriate OS specific calls to retrieve available virtual memory for the java process. In 32 bit environments this method now also searches for the maximum actually reservable amount of memory. Merge previously separate implementations for Linux/BSD/Solaris into a single method. Reviewed-by: jmasa, tamao

tschatzl
date Wed, 27 Mar 2013 19:21:18 +0100
parents 2e093b564241
children 24ef5fb05e0f
files src/os/bsd/vm/os_bsd.cpp src/os/linux/vm/os_linux.cpp src/os/posix/vm/os_posix.cpp src/os/solaris/vm/os_solaris.cpp src/os/windows/vm/os_windows.cpp src/share/vm/runtime/arguments.cpp src/share/vm/runtime/arguments.hpp src/share/vm/runtime/globals.hpp src/share/vm/runtime/os.hpp
diffstat 9 files changed, 92 insertions(+), 57 deletions(-)[+] [-] src/os/bsd/vm/os_bsd.cpp 14 src/os/linux/vm/os_linux.cpp 14 src/os/posix/vm/os_posix.cpp 62 src/os/solaris/vm/os_solaris.cpp 18 src/os/windows/vm/os_windows.cpp 11 src/share/vm/runtime/arguments.cpp 21 src/share/vm/runtime/arguments.hpp 3 src/share/vm/runtime/globals.hpp 4 src/share/vm/runtime/os.hpp 2

line wrap: on

line diff

--- a/src/os/bsd/vm/os_bsd.cpp Thu Mar 28 10:27:28 2013 +0100 +++ b/src/os/bsd/vm/os_bsd.cpp Wed Mar 27 19:21:18 2013 +0100 @@ -167,20 +167,6 @@ return Bsd::physical_memory(); } -julong os::allocatable_physical_memory(julong size) { -#ifdef _LP64

//////////////////////////////////////////////////////////////////////////////// // environment support

--- a/src/os/linux/vm/os_linux.cpp Thu Mar 28 10:27:28 2013 +0100 +++ b/src/os/linux/vm/os_linux.cpp Wed Mar 27 19:21:18 2013 +0100 @@ -194,20 +194,6 @@ return Linux::physical_memory(); } -julong os::allocatable_physical_memory(julong size) { -#ifdef _LP64

//////////////////////////////////////////////////////////////////////////////// // environment support

--- a/src/os/posix/vm/os_posix.cpp Thu Mar 28 10:27:28 2013 +0100 +++ b/src/os/posix/vm/os_posix.cpp Wed Mar 27 19:21:18 2013 +0100 @@ -188,4 +188,66 @@ st->cr(); } +bool os::has_allocatable_memory_limit(julong* limit) {

--- a/src/os/solaris/vm/os_solaris.cpp Thu Mar 28 10:27:28 2013 +0100 +++ b/src/os/solaris/vm/os_solaris.cpp Wed Mar 27 19:21:18 2013 +0100 @@ -476,24 +476,6 @@ return Solaris::physical_memory(); } -julong os::allocatable_physical_memory(julong size) { -#ifdef _LP64

static hrtime_t first_hrtime = 0; static const hrtime_t hrtime_hz = 100010001000; const int LOCK_BUSY = 1;

--- a/src/os/windows/vm/os_windows.cpp Thu Mar 28 10:27:28 2013 +0100 +++ b/src/os/windows/vm/os_windows.cpp Wed Mar 27 19:21:18 2013 +0100 @@ -686,12 +686,17 @@ return win32::physical_memory(); } -julong os::allocatable_physical_memory(julong size) { +bool os::has_allocatable_memory_limit(julong* limit) {

#ifdef _LP64

#else // Limit to 1400m because of the 2gb address space wall

#endif }

--- a/src/share/vm/runtime/arguments.cpp Thu Mar 28 10:27:28 2013 +0100 +++ b/src/share/vm/runtime/arguments.cpp Wed Mar 27 19:21:18 2013 +0100 @@ -1552,6 +1552,15 @@ } } +julong Arguments::limit_by_allocatable_memory(julong limit) {

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

julong reasonable_initial = phys_mem / InitialRAMFraction; reasonable_initial = MAX2(reasonable_initial, reasonable_minimum); reasonable_initial = MIN2(reasonable_initial, (julong)MaxHeapSize);

if (PrintGCDetails && Verbose) { // Cannot use gclog_or_tty yet. @@ -2608,9 +2617,7 @@ initHeapSize = MIN2(total_memory / (julong)2, total_memory - (julong)160*M);

if (FLAG_IS_DEFAULT(MaxHeapSize)) { FLAG_SET_CMDLINE(uintx, MaxHeapSize, initHeapSize);

--- a/src/share/vm/runtime/arguments.hpp Thu Mar 28 10:27:28 2013 +0100 +++ b/src/share/vm/runtime/arguments.hpp Wed Mar 27 19:21:18 2013 +0100 @@ -312,6 +312,9 @@ static void set_use_compressed_oops(); static void set_ergonomics_flags(); static void set_shared_spaces_flags();

--- a/src/share/vm/runtime/globals.hpp Thu Mar 28 10:27:28 2013 +0100 +++ b/src/share/vm/runtime/globals.hpp Wed Mar 27 19:21:18 2013 +0100 @@ -1962,6 +1962,10 @@ product(uintx, InitialRAMFraction, 64, [](#l8.4) "Fraction (1/n) of real memory used for initial heap size") [](#l8.5) [](#l8.6)

--- a/src/share/vm/runtime/os.hpp Thu Mar 28 10:27:28 2013 +0100 +++ b/src/share/vm/runtime/os.hpp Wed Mar 27 19:21:18 2013 +0100 @@ -184,7 +184,7 @@ } static julong available_memory(); static julong physical_memory();