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 {