Skip to content

Commit 80ccc98

Browse files
committed
8328075: Shenandoah: Avoid forwarding when objects don't move in full-GC
Reviewed-by: wkemper, shade, kdnilsen, ysr
1 parent 5249cc0 commit 80ccc98

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/hotspot/share/gc/shenandoah/shenandoahFullGC.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,11 +364,13 @@ class ShenandoahPrepareForCompactionObjectClosure : public ObjectClosure {
364364
_compact_point = _to_region->bottom();
365365
}
366366

367-
// Object fits into current region, record new location:
367+
// Object fits into current region, record new location, if object does not move:
368368
assert(_compact_point + obj_size <= _to_region->end(), "must fit");
369369
shenandoah_assert_not_forwarded(nullptr, p);
370-
_preserved_marks->push_if_necessary(p, p->mark());
371-
p->forward_to(cast_to_oop(_compact_point));
370+
if (_compact_point != cast_from_oop<HeapWord*>(p)) {
371+
_preserved_marks->push_if_necessary(p, p->mark());
372+
p->forward_to(cast_to_oop(_compact_point));
373+
}
372374
_compact_point += obj_size;
373375
}
374376
};
@@ -864,6 +866,7 @@ class ShenandoahCompactObjectsClosure : public ObjectClosure {
864866
if (p->is_forwarded()) {
865867
HeapWord* compact_from = cast_from_oop<HeapWord*>(p);
866868
HeapWord* compact_to = cast_from_oop<HeapWord*>(p->forwardee());
869+
assert(compact_from != compact_to, "Forwarded object should move");
867870
Copy::aligned_conjoint_words(compact_from, compact_to, size);
868871
oop new_obj = cast_to_oop(compact_to);
869872

0 commit comments

Comments
 (0)