334 return MemRegion(bottom(), |
334 return MemRegion(bottom(), |
335 BlockOffsetArrayUseUnallocatedBlock ? |
335 BlockOffsetArrayUseUnallocatedBlock ? |
336 unallocated_block() : end()); |
336 unallocated_block() : end()); |
337 } |
337 } |
338 |
338 |
339 // This is needed because the default implementation uses block_start() |
|
340 // which can;t be used at certain times (for example phase 3 of mark-sweep). |
|
341 // A better fix is to change the assertions in phase 3 of mark-sweep to |
|
342 // use is_in_reserved(), but that is deferred since the is_in() assertions |
|
343 // are buried through several layers of callers and are used elsewhere |
|
344 // as well. |
|
345 bool is_in(const void* p) const { |
339 bool is_in(const void* p) const { |
346 return used_region().contains(p); |
340 return used_region().contains(p); |
347 } |
341 } |
348 |
342 |
349 virtual bool is_free_block(const HeapWord* p) const; |
343 virtual bool is_free_block(const HeapWord* p) const; |