aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/memory/space.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/share/vm/memory/space.cpp')
-rw-r--r--src/share/vm/memory/space.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/share/vm/memory/space.cpp b/src/share/vm/memory/space.cpp
index 652d585bb..00f970013 100644
--- a/src/share/vm/memory/space.cpp
+++ b/src/share/vm/memory/space.cpp
@@ -569,7 +569,15 @@ void Space::object_iterate_mem(MemRegion mr, UpwardsObjectClosure* cl) {
if (prev > mr.start()) {
region_start_addr = prev;
blk_start_addr = prev;
- assert(blk_start_addr == block_start(region_start_addr), "invariant");
+ // The previous invocation may have pushed "prev" beyond the
+ // last allocated block yet there may be still be blocks
+ // in this region due to a particular coalescing policy.
+ // Relax the assertion so that the case where the unallocated
+ // block is maintained and "prev" is beyond the unallocated
+ // block does not cause the assertion to fire.
+ assert((BlockOffsetArrayUseUnallocatedBlock &&
+ (!is_in(prev))) ||
+ (blk_start_addr == block_start(region_start_addr)), "invariant");
} else {
region_start_addr = mr.start();
blk_start_addr = block_start(region_start_addr);
@@ -705,6 +713,12 @@ void ContiguousSpace::object_iterate(ObjectClosure* blk) {
object_iterate_from(bm, blk);
}
+// For a continguous space object_iterate() and safe_object_iterate()
+// are the same.
+void ContiguousSpace::safe_object_iterate(ObjectClosure* blk) {
+ object_iterate(blk);
+}
+
void ContiguousSpace::object_iterate_from(WaterMark mark, ObjectClosure* blk) {
assert(mark.space() == this, "Mark does not match space");
HeapWord* p = mark.point();