< prev index next >

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

Print this page
*** 30,10 ***
--- 30,11 ---
  #include "gc/shared/gcTimer.hpp"
  #include "gc/shared/gcTraceTime.inline.hpp"
  #include "gc/shared/locationPrinter.inline.hpp"
  #include "gc/shared/memAllocator.hpp"
  #include "gc/shared/plab.hpp"
+ #include "gc/shared/slidingForwarding.hpp"
  #include "gc/shared/tlab_globals.hpp"
  
  #include "gc/shenandoah/shenandoahBarrierSet.hpp"
  #include "gc/shenandoah/shenandoahClosures.inline.hpp"
  #include "gc/shenandoah/shenandoahCollectionSet.hpp"

*** 399,10 ***
--- 400,12 ---
  
    _control_thread = new ShenandoahControlThread();
  
    ShenandoahInitLogger::print();
  
+   SlidingForwarding::initialize(_heap_region, ShenandoahHeapRegion::region_size_words());
+ 
    return JNI_OK;
  }
  
  void ShenandoahHeap::initialize_mode() {
    if (ShenandoahGCMode != NULL) {

*** 951,11 ***
    ShenandoahConcurrentEvacuateRegionObjectClosure(ShenandoahHeap* heap) :
      _heap(heap), _thread(Thread::current()) {}
  
    void do_object(oop p) {
      shenandoah_assert_marked(NULL, p);
!     if (!p->is_forwarded()) {
        _heap->evacuate_object(p, _thread);
      }
    }
  };
  
--- 954,11 ---
    ShenandoahConcurrentEvacuateRegionObjectClosure(ShenandoahHeap* heap) :
      _heap(heap), _thread(Thread::current()) {}
  
    void do_object(oop p) {
      shenandoah_assert_marked(NULL, p);
!     if (!ShenandoahForwarding::is_forwarded(p)) {
        _heap->evacuate_object(p, _thread);
      }
    }
  };
  

*** 1299,10 ***
--- 1302,11 ---
  
    // Work through the oop stack to traverse heap
    while (! oop_stack.is_empty()) {
      oop obj = oop_stack.pop();
      assert(oopDesc::is_oop(obj), "must be a valid oop");
+     shenandoah_assert_not_in_cset_except(NULL, obj, cancelled_gc());
      cl->do_object(obj);
      obj->oop_iterate(&oops);
    }
  
    assert(oop_stack.is_empty(), "should be empty");
< prev index next >