855 os::vm_page_size()) || 856 Universe::narrow_oop_base() == NULL, "invalid value"); 857 assert(Universe::narrow_oop_shift() == LogMinObjAlignmentInBytes || 858 Universe::narrow_oop_shift() == 0, "invalid value"); 859 #endif 860 861 // We will never reach the CATCH below since Exceptions::_throw will cause 862 // the VM to exit if an exception is thrown during initialization 863 864 if (UseTLAB) { 865 assert(Universe::heap()->supports_tlab_allocation(), 866 "Should support thread-local allocation buffers"); 867 ThreadLocalAllocBuffer::startup_initialization(); 868 } 869 return JNI_OK; 870 } 871 872 873 // Reserve the Java heap, which is now the same for all GCs. 874 ReservedSpace Universe::reserve_heap(size_t heap_size, size_t alignment) { 875 size_t total_reserved = align_size_up(heap_size, alignment); 876 assert(!UseCompressedOops || (total_reserved <= (OopEncodingHeapMax - os::vm_page_size())), 877 "heap size is too big for compressed oops"); 878 879 bool use_large_pages = UseLargePages && is_size_aligned(alignment, os::large_page_size()); 880 assert(!UseLargePages 881 || UseParallelOldGC 882 || use_large_pages, "Wrong alignment to use large pages"); 883 884 char* addr = Universe::preferred_heap_base(total_reserved, alignment, Universe::UnscaledNarrowOop); 885 886 ReservedHeapSpace total_rs(total_reserved, alignment, use_large_pages, addr); 887 888 if (UseCompressedOops) { 889 if (addr != NULL && !total_rs.is_reserved()) { 890 // Failed to reserve at specified address - the requested memory 891 // region is taken already, for example, by 'java' launcher. 892 // Try again to reserver heap higher. 893 addr = Universe::preferred_heap_base(total_reserved, alignment, Universe::ZeroBasedNarrowOop); 894 | 855 os::vm_page_size()) || 856 Universe::narrow_oop_base() == NULL, "invalid value"); 857 assert(Universe::narrow_oop_shift() == LogMinObjAlignmentInBytes || 858 Universe::narrow_oop_shift() == 0, "invalid value"); 859 #endif 860 861 // We will never reach the CATCH below since Exceptions::_throw will cause 862 // the VM to exit if an exception is thrown during initialization 863 864 if (UseTLAB) { 865 assert(Universe::heap()->supports_tlab_allocation(), 866 "Should support thread-local allocation buffers"); 867 ThreadLocalAllocBuffer::startup_initialization(); 868 } 869 return JNI_OK; 870 } 871 872 873 // Reserve the Java heap, which is now the same for all GCs. 874 ReservedSpace Universe::reserve_heap(size_t heap_size, size_t alignment) { 875 assert(alignment <= Arguments::largest_heap_alignment(), 876 err_msg("actual alignment "SIZE_FORMAT" must be within maximum heap alignment "SIZE_FORMAT, 877 alignment, Arguments::largest_heap_alignment())); 878 size_t total_reserved = align_size_up(heap_size, alignment); 879 assert(!UseCompressedOops || (total_reserved <= (OopEncodingHeapMax - os::vm_page_size())), 880 "heap size is too big for compressed oops"); 881 882 bool use_large_pages = UseLargePages && is_size_aligned(alignment, os::large_page_size()); 883 assert(!UseLargePages 884 || UseParallelOldGC 885 || use_large_pages, "Wrong alignment to use large pages"); 886 887 char* addr = Universe::preferred_heap_base(total_reserved, alignment, Universe::UnscaledNarrowOop); 888 889 ReservedHeapSpace total_rs(total_reserved, alignment, use_large_pages, addr); 890 891 if (UseCompressedOops) { 892 if (addr != NULL && !total_rs.is_reserved()) { 893 // Failed to reserve at specified address - the requested memory 894 // region is taken already, for example, by 'java' launcher. 895 // Try again to reserver heap higher. 896 addr = Universe::preferred_heap_base(total_reserved, alignment, Universe::ZeroBasedNarrowOop); 897 |