mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8008217: CDS: Class data sharing limits the malloc heap on Solaris
In 64bit VM move CDS archive address to 32G on all platforms using new flag SharedBaseAddress. In 32bit VM set CDS archive address to 3Gb on Linux and let other OSs pick the address. Reviewed-by: kvn, dcubed, zgu, hseigel
This commit is contained in:
parent
3277de9dad
commit
e21f2d67e1
11 changed files with 18 additions and 28 deletions
|
@ -46,7 +46,7 @@ define_pd_global(uintx, SurvivorRatio, 8);
|
||||||
|
|
||||||
define_pd_global(uintx, JVMInvokeMethodSlack, 8192);
|
define_pd_global(uintx, JVMInvokeMethodSlack, 8192);
|
||||||
|
|
||||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
// Used on 64 bit platforms for UseCompressedOops base address
|
||||||
define_pd_global(uintx, HeapBaseMinAddress, 2*G);
|
define_pd_global(uintx, HeapBaseMinAddress, 2*G);
|
||||||
|
|
||||||
#endif // OS_CPU_BSD_X86_VM_GLOBALS_BSD_X86_HPP
|
#endif // OS_CPU_BSD_X86_VM_GLOBALS_BSD_X86_HPP
|
||||||
|
|
|
@ -41,7 +41,7 @@ define_pd_global(intx, VMThreadStackSize, 512);
|
||||||
define_pd_global(intx, CompilerThreadStackSize, 0);
|
define_pd_global(intx, CompilerThreadStackSize, 0);
|
||||||
define_pd_global(uintx, JVMInvokeMethodSlack, 8192);
|
define_pd_global(uintx, JVMInvokeMethodSlack, 8192);
|
||||||
|
|
||||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
// Used on 64 bit platforms for UseCompressedOops base address
|
||||||
define_pd_global(uintx, HeapBaseMinAddress, 2*G);
|
define_pd_global(uintx, HeapBaseMinAddress, 2*G);
|
||||||
|
|
||||||
#endif // OS_CPU_BSD_ZERO_VM_GLOBALS_BSD_ZERO_HPP
|
#endif // OS_CPU_BSD_ZERO_VM_GLOBALS_BSD_ZERO_HPP
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
define_pd_global(uintx, JVMInvokeMethodSlack, 12288);
|
define_pd_global(uintx, JVMInvokeMethodSlack, 12288);
|
||||||
define_pd_global(intx, CompilerThreadStackSize, 0);
|
define_pd_global(intx, CompilerThreadStackSize, 0);
|
||||||
|
|
||||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
// Used on 64 bit platforms for UseCompressedOops base address
|
||||||
define_pd_global(uintx, HeapBaseMinAddress, CONST64(4)*G);
|
define_pd_global(uintx, HeapBaseMinAddress, CONST64(4)*G);
|
||||||
|
|
||||||
#endif // OS_CPU_LINUX_SPARC_VM_GLOBALS_LINUX_SPARC_HPP
|
#endif // OS_CPU_LINUX_SPARC_VM_GLOBALS_LINUX_SPARC_HPP
|
||||||
|
|
|
@ -44,7 +44,7 @@ define_pd_global(intx, CompilerThreadStackSize, 0);
|
||||||
|
|
||||||
define_pd_global(uintx,JVMInvokeMethodSlack, 8192);
|
define_pd_global(uintx,JVMInvokeMethodSlack, 8192);
|
||||||
|
|
||||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
// Used on 64 bit platforms for UseCompressedOops base address
|
||||||
define_pd_global(uintx,HeapBaseMinAddress, 2*G);
|
define_pd_global(uintx,HeapBaseMinAddress, 2*G);
|
||||||
|
|
||||||
#endif // OS_CPU_LINUX_X86_VM_GLOBALS_LINUX_X86_HPP
|
#endif // OS_CPU_LINUX_X86_VM_GLOBALS_LINUX_X86_HPP
|
||||||
|
|
|
@ -41,7 +41,7 @@ define_pd_global(intx, VMThreadStackSize, 512);
|
||||||
define_pd_global(intx, CompilerThreadStackSize, 0);
|
define_pd_global(intx, CompilerThreadStackSize, 0);
|
||||||
define_pd_global(uintx, JVMInvokeMethodSlack, 8192);
|
define_pd_global(uintx, JVMInvokeMethodSlack, 8192);
|
||||||
|
|
||||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
// Used on 64 bit platforms for UseCompressedOops base address
|
||||||
define_pd_global(uintx, HeapBaseMinAddress, 2*G);
|
define_pd_global(uintx, HeapBaseMinAddress, 2*G);
|
||||||
|
|
||||||
#endif // OS_CPU_LINUX_ZERO_VM_GLOBALS_LINUX_ZERO_HPP
|
#endif // OS_CPU_LINUX_ZERO_VM_GLOBALS_LINUX_ZERO_HPP
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
define_pd_global(uintx, JVMInvokeMethodSlack, 12288);
|
define_pd_global(uintx, JVMInvokeMethodSlack, 12288);
|
||||||
define_pd_global(intx, CompilerThreadStackSize, 0);
|
define_pd_global(intx, CompilerThreadStackSize, 0);
|
||||||
|
|
||||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
// Used on 64 bit platforms for UseCompressedOops base address
|
||||||
#ifdef _LP64
|
#ifdef _LP64
|
||||||
define_pd_global(uintx, HeapBaseMinAddress, CONST64(4)*G);
|
define_pd_global(uintx, HeapBaseMinAddress, CONST64(4)*G);
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -43,7 +43,7 @@ define_pd_global(uintx,JVMInvokeMethodSlack, 10*K);
|
||||||
|
|
||||||
define_pd_global(intx, CompilerThreadStackSize, 0);
|
define_pd_global(intx, CompilerThreadStackSize, 0);
|
||||||
|
|
||||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
// Used on 64 bit platforms for UseCompressedOops base address
|
||||||
define_pd_global(uintx,HeapBaseMinAddress, 256*M);
|
define_pd_global(uintx,HeapBaseMinAddress, 256*M);
|
||||||
|
|
||||||
#endif // OS_CPU_SOLARIS_X86_VM_GLOBALS_SOLARIS_X86_HPP
|
#endif // OS_CPU_SOLARIS_X86_VM_GLOBALS_SOLARIS_X86_HPP
|
||||||
|
|
|
@ -45,7 +45,7 @@ define_pd_global(intx, CompilerThreadStackSize, 0);
|
||||||
|
|
||||||
define_pd_global(uintx, JVMInvokeMethodSlack, 8192);
|
define_pd_global(uintx, JVMInvokeMethodSlack, 8192);
|
||||||
|
|
||||||
// Used on 64 bit platforms for UseCompressedOops base address or CDS
|
// Used on 64 bit platforms for UseCompressedOops base address
|
||||||
define_pd_global(uintx, HeapBaseMinAddress, 2*G);
|
define_pd_global(uintx, HeapBaseMinAddress, 2*G);
|
||||||
|
|
||||||
#endif // OS_CPU_WINDOWS_X86_VM_GLOBALS_WINDOWS_X86_HPP
|
#endif // OS_CPU_WINDOWS_X86_VM_GLOBALS_WINDOWS_X86_HPP
|
||||||
|
|
|
@ -372,7 +372,7 @@ ReservedSpace FileMapInfo::reserve_shared_memory() {
|
||||||
// other reserved memory (like the code cache).
|
// other reserved memory (like the code cache).
|
||||||
ReservedSpace rs(size, alignment, false, requested_addr);
|
ReservedSpace rs(size, alignment, false, requested_addr);
|
||||||
if (!rs.is_reserved()) {
|
if (!rs.is_reserved()) {
|
||||||
fail_continue(err_msg("Unable to reserved shared space at required address " INTPTR_FORMAT, requested_addr));
|
fail_continue(err_msg("Unable to reserve shared space at required address " INTPTR_FORMAT, requested_addr));
|
||||||
return rs;
|
return rs;
|
||||||
}
|
}
|
||||||
// the reserved virtual memory is for mapping class data sharing archive
|
// the reserved virtual memory is for mapping class data sharing archive
|
||||||
|
|
|
@ -337,27 +337,16 @@ VirtualSpaceNode::VirtualSpaceNode(size_t byte_size) : _top(NULL), _next(NULL),
|
||||||
// align up to vm allocation granularity
|
// align up to vm allocation granularity
|
||||||
byte_size = align_size_up(byte_size, os::vm_allocation_granularity());
|
byte_size = align_size_up(byte_size, os::vm_allocation_granularity());
|
||||||
|
|
||||||
// This allocates memory with mmap. For DumpSharedspaces, allocate the
|
// This allocates memory with mmap. For DumpSharedspaces, try to reserve
|
||||||
// space at low memory so that other shared images don't conflict.
|
// configurable address, generally at the top of the Java heap so other
|
||||||
// This is the same address as memory needed for UseCompressedOops but
|
// memory addresses don't conflict.
|
||||||
// compressed oops don't work with CDS (offsets in metadata are wrong), so
|
|
||||||
// borrow the same address.
|
|
||||||
if (DumpSharedSpaces) {
|
if (DumpSharedSpaces) {
|
||||||
char* shared_base = (char*)HeapBaseMinAddress;
|
char* shared_base = (char*)SharedBaseAddress;
|
||||||
_rs = ReservedSpace(byte_size, 0, false, shared_base, 0);
|
_rs = ReservedSpace(byte_size, 0, false, shared_base, 0);
|
||||||
if (_rs.is_reserved()) {
|
if (_rs.is_reserved()) {
|
||||||
assert(_rs.base() == shared_base, "should match");
|
assert(shared_base == 0 || _rs.base() == shared_base, "should match");
|
||||||
} else {
|
} else {
|
||||||
// If we are dumping the heap, then allocate a wasted block of address
|
// Get a mmap region anywhere if the SharedBaseAddress fails.
|
||||||
// space in order to push the heap to a lower address. This extra
|
|
||||||
// address range allows for other (or larger) libraries to be loaded
|
|
||||||
// without them occupying the space required for the shared spaces.
|
|
||||||
uintx reserved = 0;
|
|
||||||
uintx block_size = 64*1024*1024;
|
|
||||||
while (reserved < SharedDummyBlockSize) {
|
|
||||||
char* dummy = os::reserve_memory(block_size);
|
|
||||||
reserved += block_size;
|
|
||||||
}
|
|
||||||
_rs = ReservedSpace(byte_size);
|
_rs = ReservedSpace(byte_size);
|
||||||
}
|
}
|
||||||
MetaspaceShared::set_shared_rs(&_rs);
|
MetaspaceShared::set_shared_rs(&_rs);
|
||||||
|
|
|
@ -3573,8 +3573,9 @@ class CommandLineFlags {
|
||||||
product(uintx, SharedMiscCodeSize, 120*K, \
|
product(uintx, SharedMiscCodeSize, 120*K, \
|
||||||
"Size of the shared miscellaneous code area (in bytes)") \
|
"Size of the shared miscellaneous code area (in bytes)") \
|
||||||
\
|
\
|
||||||
product(uintx, SharedDummyBlockSize, 0, \
|
product(uintx, SharedBaseAddress, LP64_ONLY(32*G) \
|
||||||
"Size of dummy block used to shift heap addresses (in bytes)") \
|
NOT_LP64(LINUX_ONLY(2*G) NOT_LINUX(0)), \
|
||||||
|
"Address to allocate shared memory region for class data") \
|
||||||
\
|
\
|
||||||
diagnostic(bool, EnableInvokeDynamic, true, \
|
diagnostic(bool, EnableInvokeDynamic, true, \
|
||||||
"support JSR 292 (method handles, invokedynamic, " \
|
"support JSR 292 (method handles, invokedynamic, " \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue