796 }
797 st->cr();
798 }
799
800 ReservedSpace Universe::reserve_heap(size_t heap_size, size_t alignment) {
801
802 assert(alignment <= Arguments::conservative_max_heap_alignment(),
803 "actual alignment " SIZE_FORMAT " must be within maximum heap alignment " SIZE_FORMAT,
804 alignment, Arguments::conservative_max_heap_alignment());
805
806 size_t total_reserved = align_size_up(heap_size, alignment);
807 assert(!UseCompressedOops || (total_reserved <= (OopEncodingHeapMax - os::vm_page_size())),
808 "heap size is too big for compressed oops");
809
810 bool use_large_pages = UseLargePages && is_size_aligned(alignment, os::large_page_size());
811 assert(!UseLargePages
812 || UseParallelGC
813 || use_large_pages, "Wrong alignment to use large pages");
814
815 // Now create the space.
816 ReservedHeapSpace total_rs(total_reserved, alignment, use_large_pages);
817
818 if (total_rs.is_reserved()) {
819 assert((total_reserved == total_rs.size()) && ((uintptr_t)total_rs.base() % alignment == 0),
820 "must be exactly of required size and alignment");
821 // We are good.
822
823 if (UseCompressedOops) {
824 // Universe::initialize_heap() will reset this to NULL if unscaled
825 // or zero-based narrow oops are actually used.
826 // Else heap start and base MUST differ, so that NULL can be encoded nonambigous.
827 Universe::set_narrow_oop_base((address)total_rs.compressed_oop_base());
828 }
829
830 return total_rs;
831 }
832
833 vm_exit_during_initialization(
834 err_msg("Could not reserve enough space for " SIZE_FORMAT "KB object heap",
835 total_reserved/K));
836
|
796 }
797 st->cr();
798 }
799
800 ReservedSpace Universe::reserve_heap(size_t heap_size, size_t alignment) {
801
802 assert(alignment <= Arguments::conservative_max_heap_alignment(),
803 "actual alignment " SIZE_FORMAT " must be within maximum heap alignment " SIZE_FORMAT,
804 alignment, Arguments::conservative_max_heap_alignment());
805
806 size_t total_reserved = align_size_up(heap_size, alignment);
807 assert(!UseCompressedOops || (total_reserved <= (OopEncodingHeapMax - os::vm_page_size())),
808 "heap size is too big for compressed oops");
809
810 bool use_large_pages = UseLargePages && is_size_aligned(alignment, os::large_page_size());
811 assert(!UseLargePages
812 || UseParallelGC
813 || use_large_pages, "Wrong alignment to use large pages");
814
815 // Now create the space.
816 ReservedHeapSpace total_rs(total_reserved, alignment, use_large_pages, FSDirForHeap);
817
818 if (total_rs.is_reserved()) {
819 assert((total_reserved == total_rs.size()) && ((uintptr_t)total_rs.base() % alignment == 0),
820 "must be exactly of required size and alignment");
821 // We are good.
822
823 if (UseCompressedOops) {
824 // Universe::initialize_heap() will reset this to NULL if unscaled
825 // or zero-based narrow oops are actually used.
826 // Else heap start and base MUST differ, so that NULL can be encoded nonambigous.
827 Universe::set_narrow_oop_base((address)total_rs.compressed_oop_base());
828 }
829
830 return total_rs;
831 }
832
833 vm_exit_during_initialization(
834 err_msg("Could not reserve enough space for " SIZE_FORMAT "KB object heap",
835 total_reserved/K));
836
|