795 st->print(", no protected page in front of the heap"); 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_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_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, AllocateHeapAt); 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 if (AllocateHeapAt != NULL) { 831 log_info(gc,heap)("Successfully allocated Java heap at location %s", AllocateHeapAt); 832 } 833 return total_rs; 834 } | 795 st->print(", no protected page in front of the heap"); 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_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_aligned(alignment, os::large_page_size()); 811 assert(!UseLargePages 812 || UseParallelGC 813 || use_large_pages, "Wrong alignment to use large pages"); 814 815 // When AllocateOldGenAt is set, we cannot use largepages for entire heap memory. 816 // Only young gen which is allocated in dram can use large pages, but we currently don't support that. 817 use_large_pages = (AllocateOldGenAt != NULL) ? false : use_large_pages; 818 819 // Now create the space. 820 ReservedHeapSpace total_rs(total_reserved, alignment, use_large_pages, AllocateHeapAt); 821 822 if (total_rs.is_reserved()) { 823 assert((total_reserved == total_rs.size()) && ((uintptr_t)total_rs.base() % alignment == 0), 824 "must be exactly of required size and alignment"); 825 // We are good. 826 827 if (UseCompressedOops) { 828 // Universe::initialize_heap() will reset this to NULL if unscaled 829 // or zero-based narrow oops are actually used. 830 // Else heap start and base MUST differ, so that NULL can be encoded nonambigous. 831 Universe::set_narrow_oop_base((address)total_rs.compressed_oop_base()); 832 } 833 834 if (AllocateHeapAt != NULL) { 835 log_info(gc,heap)("Successfully allocated Java heap at location %s", AllocateHeapAt); 836 } 837 return total_rs; 838 } |