< prev index next >

src/hotspot/share/memory/universe.cpp

Print this page




 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 


< prev index next >