55 }
56 assert(_low_boundary == NULL, "VirtualSpace already initialized");
57 assert(commit_size > 0, "Granularity must be non-zero.");
58
59 guarantee(is_ptr_aligned(rs.base(), commit_size),
60 err_msg("Reserved space base " PTR_FORMAT" is not aligned to requested page size " SIZE_FORMAT, p2i(rs.base()), commit_size));
61 guarantee(is_size_aligned(actual_size, os::vm_page_size()),
62 err_msg("Given actual reserved space size needs to be OS page size aligned (%d bytes) but is " SIZE_FORMAT, os::vm_page_size(), actual_size));
63 guarantee(actual_size <= rs.size(),
64 err_msg("Actual size of reserved space " SIZE_FORMAT" bytes is smaller than reservation at " SIZE_FORMAT" bytes", actual_size, rs.size()));
65
66 _low_boundary = rs.base();
67 _high_boundary = _low_boundary + actual_size;
68
69 _special = rs.special();
70 _executable = rs.executable();
71
72 _commit_size = commit_size;
73
74 assert(_committed.size() == 0, "virtual space initialized more than once");
75 BitMap::idx_t size_in_commit_pages = round_to(rs.size(), commit_size);
76 _committed.resize(size_in_commit_pages, /* in_resource_area */ false);
77 if (_special) {
78 _dirty.resize(size_in_commit_pages, /* in_resource_area */ false);
79 }
80
81 return true;
82 }
83
84 G1PageBasedVirtualSpace::~G1PageBasedVirtualSpace() {
85 release();
86 }
87
88 void G1PageBasedVirtualSpace::release() {
89 // This does not release memory it never reserved.
90 // Caller must release via rs.release();
91 _low_boundary = NULL;
92 _high_boundary = NULL;
93 _special = false;
94 _executable = false;
95 _commit_size = 0;
|
55 }
56 assert(_low_boundary == NULL, "VirtualSpace already initialized");
57 assert(commit_size > 0, "Granularity must be non-zero.");
58
59 guarantee(is_ptr_aligned(rs.base(), commit_size),
60 err_msg("Reserved space base " PTR_FORMAT" is not aligned to requested page size " SIZE_FORMAT, p2i(rs.base()), commit_size));
61 guarantee(is_size_aligned(actual_size, os::vm_page_size()),
62 err_msg("Given actual reserved space size needs to be OS page size aligned (%d bytes) but is " SIZE_FORMAT, os::vm_page_size(), actual_size));
63 guarantee(actual_size <= rs.size(),
64 err_msg("Actual size of reserved space " SIZE_FORMAT" bytes is smaller than reservation at " SIZE_FORMAT" bytes", actual_size, rs.size()));
65
66 _low_boundary = rs.base();
67 _high_boundary = _low_boundary + actual_size;
68
69 _special = rs.special();
70 _executable = rs.executable();
71
72 _commit_size = commit_size;
73
74 assert(_committed.size() == 0, "virtual space initialized more than once");
75 BitMap::idx_t size_in_commit_pages = round_to(rs.size(), commit_size) / commit_size;
76 _committed.resize(size_in_commit_pages, /* in_resource_area */ false);
77 if (_special) {
78 _dirty.resize(size_in_commit_pages, /* in_resource_area */ false);
79 }
80
81 return true;
82 }
83
84 G1PageBasedVirtualSpace::~G1PageBasedVirtualSpace() {
85 release();
86 }
87
88 void G1PageBasedVirtualSpace::release() {
89 // This does not release memory it never reserved.
90 // Caller must release via rs.release();
91 _low_boundary = NULL;
92 _high_boundary = NULL;
93 _special = false;
94 _executable = false;
95 _commit_size = 0;
|