42 guarantee(rs.is_reserved(), "Given reserved space must have been reserved already."); |
42 guarantee(rs.is_reserved(), "Given reserved space must have been reserved already."); |
43 |
43 |
44 vmassert(_low_boundary == NULL, "VirtualSpace already initialized"); |
44 vmassert(_low_boundary == NULL, "VirtualSpace already initialized"); |
45 vmassert(page_size > 0, "Page size must be non-zero."); |
45 vmassert(page_size > 0, "Page size must be non-zero."); |
46 |
46 |
47 guarantee(is_ptr_aligned(rs.base(), page_size), |
47 guarantee(is_aligned(rs.base(), page_size), |
48 "Reserved space base " PTR_FORMAT " is not aligned to requested page size " SIZE_FORMAT, p2i(rs.base()), page_size); |
48 "Reserved space base " PTR_FORMAT " is not aligned to requested page size " SIZE_FORMAT, p2i(rs.base()), page_size); |
49 guarantee(is_size_aligned(used_size, os::vm_page_size()), |
49 guarantee(is_aligned(used_size, os::vm_page_size()), |
50 "Given used reserved space size needs to be OS page size aligned (%d bytes) but is " SIZE_FORMAT, os::vm_page_size(), used_size); |
50 "Given used reserved space size needs to be OS page size aligned (%d bytes) but is " SIZE_FORMAT, os::vm_page_size(), used_size); |
51 guarantee(used_size <= rs.size(), |
51 guarantee(used_size <= rs.size(), |
52 "Used size of reserved space " SIZE_FORMAT " bytes is smaller than reservation at " SIZE_FORMAT " bytes", used_size, rs.size()); |
52 "Used size of reserved space " SIZE_FORMAT " bytes is smaller than reservation at " SIZE_FORMAT " bytes", used_size, rs.size()); |
53 guarantee(is_size_aligned(rs.size(), page_size), |
53 guarantee(is_aligned(rs.size(), page_size), |
54 "Expected that the virtual space is size aligned, but " SIZE_FORMAT " is not aligned to page size " SIZE_FORMAT, rs.size(), page_size); |
54 "Expected that the virtual space is size aligned, but " SIZE_FORMAT " is not aligned to page size " SIZE_FORMAT, rs.size(), page_size); |
55 |
55 |
56 _low_boundary = rs.base(); |
56 _low_boundary = rs.base(); |
57 _high_boundary = _low_boundary + used_size; |
57 _high_boundary = _low_boundary + used_size; |
58 |
58 |
139 } |
139 } |
140 |
140 |
141 void G1PageBasedVirtualSpace::commit_tail() { |
141 void G1PageBasedVirtualSpace::commit_tail() { |
142 vmassert(_tail_size > 0, "The size of the tail area must be > 0 when reaching here"); |
142 vmassert(_tail_size > 0, "The size of the tail area must be > 0 when reaching here"); |
143 |
143 |
144 char* const aligned_end_address = align_ptr_down(_high_boundary, _page_size); |
144 char* const aligned_end_address = align_down(_high_boundary, _page_size); |
145 os::commit_memory_or_exit(aligned_end_address, _tail_size, os::vm_page_size(), _executable, |
145 os::commit_memory_or_exit(aligned_end_address, _tail_size, os::vm_page_size(), _executable, |
146 err_msg("Failed to commit tail area from " PTR_FORMAT " to " PTR_FORMAT " of length " SIZE_FORMAT ".", |
146 err_msg("Failed to commit tail area from " PTR_FORMAT " to " PTR_FORMAT " of length " SIZE_FORMAT ".", |
147 p2i(aligned_end_address), p2i(_high_boundary), _tail_size)); |
147 p2i(aligned_end_address), p2i(_high_boundary), _tail_size)); |
148 } |
148 } |
149 |
149 |