< prev index next > src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp
Print this page
#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"
_control_thread = new ShenandoahControlThread();
ShenandoahInitLogger::print();
+ SlidingForwarding::initialize(_heap_region, ShenandoahHeapRegion::region_size_words());
+
return JNI_OK;
}
void ShenandoahHeap::initialize_mode() {
if (ShenandoahGCMode != NULL) {
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);
}
}
};
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);
}
}
};
// 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 >