73 |
73 |
74 _page_size = page_size; |
74 _page_size = page_size; |
75 |
75 |
76 vmassert(_committed.size() == 0, "virtual space initialized more than once"); |
76 vmassert(_committed.size() == 0, "virtual space initialized more than once"); |
77 BitMap::idx_t size_in_pages = rs.size() / page_size; |
77 BitMap::idx_t size_in_pages = rs.size() / page_size; |
78 _committed.resize(size_in_pages, /* in_resource_area */ false); |
78 _committed.initialize(size_in_pages); |
79 if (_special) { |
79 if (_special) { |
80 _dirty.resize(size_in_pages, /* in_resource_area */ false); |
80 _dirty.initialize(size_in_pages); |
81 } |
81 } |
82 |
82 |
83 _tail_size = used_size % _page_size; |
83 _tail_size = used_size % _page_size; |
84 } |
84 } |
85 |
85 |
86 G1PageBasedVirtualSpace::~G1PageBasedVirtualSpace() { |
86 G1PageBasedVirtualSpace::~G1PageBasedVirtualSpace() { |
87 release(); |
|
88 } |
|
89 |
|
90 void G1PageBasedVirtualSpace::release() { |
|
91 // This does not release memory it never reserved. |
87 // This does not release memory it never reserved. |
92 // Caller must release via rs.release(); |
88 // Caller must release via rs.release(); |
93 _low_boundary = NULL; |
89 _low_boundary = NULL; |
94 _high_boundary = NULL; |
90 _high_boundary = NULL; |
95 _special = false; |
91 _special = false; |
96 _executable = false; |
92 _executable = false; |
97 _page_size = 0; |
93 _page_size = 0; |
98 _tail_size = 0; |
94 _tail_size = 0; |
99 _committed.resize(0, false); |
|
100 _dirty.resize(0, false); |
|
101 } |
95 } |
102 |
96 |
103 size_t G1PageBasedVirtualSpace::committed_size() const { |
97 size_t G1PageBasedVirtualSpace::committed_size() const { |
104 size_t result = _committed.count_one_bits() * _page_size; |
98 size_t result = _committed.count_one_bits() * _page_size; |
105 // The last page might not be in full. |
99 // The last page might not be in full. |