< prev index next >

src/share/vm/memory/universe.cpp

Print this page




 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 


< prev index next >