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