Mercurial > hg > jdk9-shenandoah > hotspot
changeset 9624:790069ea3727
Several small fixes to mark-compact. Most importantly, compact regions even if they are empty. That's important for properly setting their top after compaction.
author | rkennke |
---|---|
date | Tue, 22 Sep 2015 23:47:24 +0200 |
parents | 261ef52a9f2f |
children | c7cafe8a2ba0 |
files | src/share/vm/gc/shared/space.inline.hpp src/share/vm/gc/shenandoah/shenandoahHeapRegion.cpp src/share/vm/gc/shenandoah/shenandoahMarkCompact.cpp |
diffstat | 3 files changed, 6 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/gc/shared/space.inline.hpp Fri Sep 18 15:44:29 2015 +0200 +++ b/src/share/vm/gc/shared/space.inline.hpp Tue Sep 22 23:47:24 2015 +0200 @@ -122,7 +122,9 @@ while (q < t) { assert(!space->scanned_block_is_obj(q) || - space->make_oop(q)->mark()->is_marked() || space->make_oop(q)->mark()->is_unlocked() || + space->make_oop(q)->mark()->is_marked() || + oopDesc::bs()->resolve_oop(space->make_oop(q))->mark()->is_marked() || + space->make_oop(q)->mark()->is_unlocked() || space->make_oop(q)->mark()->has_bias_pattern(), "these are the only valid states during a mark sweep"); if (space->scanned_block_is_obj(q) && space->make_oop(q)->is_gc_marked()) {
--- a/src/share/vm/gc/shenandoah/shenandoahHeapRegion.cpp Fri Sep 18 15:44:29 2015 +0200 +++ b/src/share/vm/gc/shenandoah/shenandoahHeapRegion.cpp Tue Sep 22 23:47:24 2015 +0200 @@ -241,7 +241,7 @@ } void ShenandoahHeapRegion::do_reset() { - Space::initialize(reserved, true, false); + ContiguousSpace::initialize(reserved, true, false); clearLiveData(); _humongous_start = false; _humongous_continuation = false;
--- a/src/share/vm/gc/shenandoah/shenandoahMarkCompact.cpp Fri Sep 18 15:44:29 2015 +0200 +++ b/src/share/vm/gc/shenandoah/shenandoahMarkCompact.cpp Tue Sep 22 23:47:24 2015 +0200 @@ -284,7 +284,7 @@ _cp.threshold = r->initialize_threshold(); } _dead_humongous = true; - guarantee(r->region_number() > ((ShenandoahHeapRegion*)_cp.space)->region_number(), + guarantee(r->region_number() >= ((ShenandoahHeapRegion*)_cp.space)->region_number(), "only reset regions that are not yet used for compaction"); r->reset(); r->prepare_for_compaction(&_cp); @@ -378,7 +378,7 @@ assert(obj->is_gc_marked(), "expect marked humongous object"); obj->init_mark(); } - } else if (r->not_empty()) { + } else { r->compact(); } @@ -398,10 +398,6 @@ bool doHeapRegion(ShenandoahHeapRegion* r) { if (r->is_humongous()) { - if (r->is_humongous_start()) { - oop obj = oop(r->bottom() + BrooksPointer::BROOKS_POINTER_OBJ_SIZE); - size_t size = obj->size() + BrooksPointer::BROOKS_POINTER_OBJ_SIZE; - } _live += ShenandoahHeapRegion::RegionSizeBytes; } else {