567 bool last_was_obj_array = false; |
567 bool last_was_obj_array = false; |
568 HeapWord *blk_start_addr, *region_start_addr; |
568 HeapWord *blk_start_addr, *region_start_addr; |
569 if (prev > mr.start()) { |
569 if (prev > mr.start()) { |
570 region_start_addr = prev; |
570 region_start_addr = prev; |
571 blk_start_addr = prev; |
571 blk_start_addr = prev; |
572 assert(blk_start_addr == block_start(region_start_addr), "invariant"); |
572 // The previous invocation may have pushed "prev" beyond the |
|
573 // last allocated block yet there may be still be blocks |
|
574 // in this region due to a particular coalescing policy. |
|
575 // Relax the assertion so that the case where the unallocated |
|
576 // block is maintained and "prev" is beyond the unallocated |
|
577 // block does not cause the assertion to fire. |
|
578 assert((BlockOffsetArrayUseUnallocatedBlock && |
|
579 (!is_in(prev))) || |
|
580 (blk_start_addr == block_start(region_start_addr)), "invariant"); |
573 } else { |
581 } else { |
574 region_start_addr = mr.start(); |
582 region_start_addr = mr.start(); |
575 blk_start_addr = block_start(region_start_addr); |
583 blk_start_addr = block_start(region_start_addr); |
576 } |
584 } |
577 HeapWord* region_end_addr = mr.end(); |
585 HeapWord* region_end_addr = mr.end(); |