< prev index next >
src/share/vm/gc/g1/g1EvacFailure.cpp
Print this page
rev 13164 : 8183124: Remove OopsInHeapRegionClosure
@@ -33,19 +33,20 @@
#include "gc/g1/g1_globals.hpp"
#include "gc/g1/heapRegion.hpp"
#include "gc/g1/heapRegionRemSet.hpp"
#include "gc/shared/preservedMarks.inline.hpp"
-class UpdateRSetDeferred : public OopsInHeapRegionClosure {
+class UpdateRSetDeferred : public ExtendedOopClosure {
private:
G1CollectedHeap* _g1;
DirtyCardQueue *_dcq;
G1SATBCardTableModRefBS* _ct_bs;
+ HeapRegion* _from;
public:
UpdateRSetDeferred(DirtyCardQueue* dcq) :
- _g1(G1CollectedHeap::heap()), _ct_bs(_g1->g1_barrier_set()), _dcq(dcq) {}
+ _g1(G1CollectedHeap::heap()), _ct_bs(_g1->g1_barrier_set()), _dcq(dcq), _from(NULL) {}
virtual void do_oop(narrowOop* p) { do_oop_work(p); }
virtual void do_oop( oop* p) { do_oop_work(p); }
template <class T> void do_oop_work(T* p) {
assert(_from->is_in_reserved(p), "paranoia");
@@ -56,26 +57,28 @@
if (_ct_bs->mark_card_deferred(card_index)) {
_dcq->enqueue((jbyte*)_ct_bs->byte_for_index(card_index));
}
}
}
+
+ void set_region(HeapRegion* from) { _from = from; }
};
class RemoveSelfForwardPtrObjClosure: public ObjectClosure {
private:
G1CollectedHeap* _g1;
G1ConcurrentMark* _cm;
HeapRegion* _hr;
size_t _marked_bytes;
- OopsInHeapRegionClosure *_update_rset_cl;
+ UpdateRSetDeferred* _update_rset_cl;
bool _during_initial_mark;
uint _worker_id;
HeapWord* _last_forwarded_object_end;
public:
RemoveSelfForwardPtrObjClosure(HeapRegion* hr,
- OopsInHeapRegionClosure* update_rset_cl,
+ UpdateRSetDeferred* update_rset_cl,
bool during_initial_mark,
uint worker_id) :
_g1(G1CollectedHeap::heap()),
_cm(_g1->concurrent_mark()),
_hr(hr),
< prev index next >