190 inline bool ZPage::is_object_strongly_marked(uintptr_t addr) const {
191 const size_t index = ((ZAddress::offset(addr) - start()) >> object_alignment_shift()) * 2;
192 return _livemap.get(index + 1);
193 }
194
195 inline bool ZPage::is_object_live(uintptr_t addr) const {
196 return is_allocating() || is_object_marked(addr);
197 }
198
199 inline bool ZPage::is_object_strongly_live(uintptr_t addr) const {
200 return is_allocating() || is_object_strongly_marked(addr);
201 }
202
203 inline bool ZPage::mark_object(uintptr_t addr, bool finalizable, bool& inc_live) {
204 assert(ZAddress::is_marked(addr), "Invalid address");
205 assert(is_relocatable(), "Invalid page state");
206 assert(is_in(addr), "Invalid address");
207
208 // Set mark bit
209 const size_t index = ((ZAddress::offset(addr) - start()) >> object_alignment_shift()) * 2;
210 return _livemap.set_atomic(index, finalizable, inc_live);
211 }
212
213 inline void ZPage::inc_live_atomic(uint32_t objects, size_t bytes) {
214 _livemap.inc_live_atomic(objects, bytes);
215 }
216
217 inline uint32_t ZPage::live_objects() const {
218 assert(is_marked(), "Should be marked");
219 return _livemap.live_objects();
220 }
221
222 inline size_t ZPage::live_bytes() const {
223 assert(is_marked(), "Should be marked");
224 return _livemap.live_bytes();
225 }
226
227 inline void ZPage::object_iterate(ObjectClosure* cl) {
228 _livemap.iterate(cl, ZAddress::good(start()), object_alignment_shift());
229 }
230
231 inline uintptr_t ZPage::alloc_object(size_t size) {
232 assert(is_allocating(), "Invalid state");
233
234 const size_t aligned_size = align_up(size, object_alignment());
|
190 inline bool ZPage::is_object_strongly_marked(uintptr_t addr) const {
191 const size_t index = ((ZAddress::offset(addr) - start()) >> object_alignment_shift()) * 2;
192 return _livemap.get(index + 1);
193 }
194
195 inline bool ZPage::is_object_live(uintptr_t addr) const {
196 return is_allocating() || is_object_marked(addr);
197 }
198
199 inline bool ZPage::is_object_strongly_live(uintptr_t addr) const {
200 return is_allocating() || is_object_strongly_marked(addr);
201 }
202
203 inline bool ZPage::mark_object(uintptr_t addr, bool finalizable, bool& inc_live) {
204 assert(ZAddress::is_marked(addr), "Invalid address");
205 assert(is_relocatable(), "Invalid page state");
206 assert(is_in(addr), "Invalid address");
207
208 // Set mark bit
209 const size_t index = ((ZAddress::offset(addr) - start()) >> object_alignment_shift()) * 2;
210 return _livemap.set(index, finalizable, inc_live);
211 }
212
213 inline void ZPage::inc_live(uint32_t objects, size_t bytes) {
214 _livemap.inc_live(objects, bytes);
215 }
216
217 inline uint32_t ZPage::live_objects() const {
218 assert(is_marked(), "Should be marked");
219 return _livemap.live_objects();
220 }
221
222 inline size_t ZPage::live_bytes() const {
223 assert(is_marked(), "Should be marked");
224 return _livemap.live_bytes();
225 }
226
227 inline void ZPage::object_iterate(ObjectClosure* cl) {
228 _livemap.iterate(cl, ZAddress::good(start()), object_alignment_shift());
229 }
230
231 inline uintptr_t ZPage::alloc_object(size_t size) {
232 assert(is_allocating(), "Invalid state");
233
234 const size_t aligned_size = align_up(size, object_alignment());
|