862 }
863 st->cr();
864 }
865
866 ReservedSpace Universe::reserve_heap(size_t heap_size, size_t alignment) {
867
868 assert(alignment <= Arguments::conservative_max_heap_alignment(),
869 "actual alignment " SIZE_FORMAT " must be within maximum heap alignment " SIZE_FORMAT,
870 alignment, Arguments::conservative_max_heap_alignment());
871
872 size_t total_reserved = align_up(heap_size, alignment);
873 assert(!UseCompressedOops || (total_reserved <= (OopEncodingHeapMax - os::vm_page_size())),
874 "heap size is too big for compressed oops");
875
876 bool use_large_pages = UseLargePages && is_aligned(alignment, os::large_page_size());
877 assert(!UseLargePages
878 || UseParallelGC
879 || use_large_pages, "Wrong alignment to use large pages");
880
881 // Now create the space.
882 ReservedHeapSpace total_rs(total_reserved, alignment, use_large_pages);
883
884 if (total_rs.is_reserved()) {
885 assert((total_reserved == total_rs.size()) && ((uintptr_t)total_rs.base() % alignment == 0),
886 "must be exactly of required size and alignment");
887 // We are good.
888
889 if (UseCompressedOops) {
890 // Universe::initialize_heap() will reset this to NULL if unscaled
891 // or zero-based narrow oops are actually used.
892 // Else heap start and base MUST differ, so that NULL can be encoded nonambigous.
893 Universe::set_narrow_oop_base((address)total_rs.compressed_oop_base());
894 }
895
896 return total_rs;
897 }
898
899 vm_exit_during_initialization(
900 err_msg("Could not reserve enough space for " SIZE_FORMAT "KB object heap",
901 total_reserved/K));
902
903 // satisfy compiler
904 ShouldNotReachHere();
905 return ReservedHeapSpace(0, 0, false);
906 }
907
908
909 // It's the caller's responsibility to ensure glitch-freedom
910 // (if required).
911 void Universe::update_heap_info_at_gc() {
912 _heap_capacity_at_last_gc = heap()->capacity();
913 _heap_used_at_last_gc = heap()->used();
914 }
915
|
862 }
863 st->cr();
864 }
865
866 ReservedSpace Universe::reserve_heap(size_t heap_size, size_t alignment) {
867
868 assert(alignment <= Arguments::conservative_max_heap_alignment(),
869 "actual alignment " SIZE_FORMAT " must be within maximum heap alignment " SIZE_FORMAT,
870 alignment, Arguments::conservative_max_heap_alignment());
871
872 size_t total_reserved = align_up(heap_size, alignment);
873 assert(!UseCompressedOops || (total_reserved <= (OopEncodingHeapMax - os::vm_page_size())),
874 "heap size is too big for compressed oops");
875
876 bool use_large_pages = UseLargePages && is_aligned(alignment, os::large_page_size());
877 assert(!UseLargePages
878 || UseParallelGC
879 || use_large_pages, "Wrong alignment to use large pages");
880
881 // Now create the space.
882 ReservedHeapSpace total_rs(total_reserved, alignment, use_large_pages, AllocateHeapAt);
883
884 if (total_rs.is_reserved()) {
885 assert((total_reserved == total_rs.size()) && ((uintptr_t)total_rs.base() % alignment == 0),
886 "must be exactly of required size and alignment");
887 // We are good.
888
889 if (UseCompressedOops) {
890 // Universe::initialize_heap() will reset this to NULL if unscaled
891 // or zero-based narrow oops are actually used.
892 // Else heap start and base MUST differ, so that NULL can be encoded nonambigous.
893 Universe::set_narrow_oop_base((address)total_rs.compressed_oop_base());
894 }
895
896 if (AllocateHeapAt != NULL) {
897 log_info(gc,heap)("Successfully allocated Java heap at location %s", AllocateHeapAt);
898 }
899 return total_rs;
900 }
901
902 vm_exit_during_initialization(
903 err_msg("Could not reserve enough space for " SIZE_FORMAT "KB object heap",
904 total_reserved/K));
905
906 // satisfy compiler
907 ShouldNotReachHere();
908 return ReservedHeapSpace(0, 0, false);
909 }
910
911
912 // It's the caller's responsibility to ensure glitch-freedom
913 // (if required).
914 void Universe::update_heap_info_at_gc() {
915 _heap_capacity_at_last_gc = heap()->capacity();
916 _heap_used_at_last_gc = heap()->used();
917 }
918
|