38 #include "oops/compressedOops.inline.hpp" |
38 #include "oops/compressedOops.inline.hpp" |
39 #include "oops/oop.inline.hpp" |
39 #include "oops/oop.inline.hpp" |
40 |
40 |
41 class UpdateRSetDeferred : public ExtendedOopClosure { |
41 class UpdateRSetDeferred : public ExtendedOopClosure { |
42 private: |
42 private: |
43 G1CollectedHeap* _g1; |
43 G1CollectedHeap* _g1h; |
44 DirtyCardQueue* _dcq; |
44 DirtyCardQueue* _dcq; |
45 G1CardTable* _ct; |
45 G1CardTable* _ct; |
46 |
46 |
47 public: |
47 public: |
48 UpdateRSetDeferred(DirtyCardQueue* dcq) : |
48 UpdateRSetDeferred(DirtyCardQueue* dcq) : |
49 _g1(G1CollectedHeap::heap()), _ct(_g1->card_table()), _dcq(dcq) {} |
49 _g1h(G1CollectedHeap::heap()), _ct(_g1h->card_table()), _dcq(dcq) {} |
50 |
50 |
51 virtual void do_oop(narrowOop* p) { do_oop_work(p); } |
51 virtual void do_oop(narrowOop* p) { do_oop_work(p); } |
52 virtual void do_oop( oop* p) { do_oop_work(p); } |
52 virtual void do_oop( oop* p) { do_oop_work(p); } |
53 template <class T> void do_oop_work(T* p) { |
53 template <class T> void do_oop_work(T* p) { |
54 assert(_g1->heap_region_containing(p)->is_in_reserved(p), "paranoia"); |
54 assert(_g1h->heap_region_containing(p)->is_in_reserved(p), "paranoia"); |
55 assert(!_g1->heap_region_containing(p)->is_survivor(), "Unexpected evac failure in survivor region"); |
55 assert(!_g1h->heap_region_containing(p)->is_survivor(), "Unexpected evac failure in survivor region"); |
56 |
56 |
57 T const o = RawAccess<>::oop_load(p); |
57 T const o = RawAccess<>::oop_load(p); |
58 if (CompressedOops::is_null(o)) { |
58 if (CompressedOops::is_null(o)) { |
59 return; |
59 return; |
60 } |
60 } |
83 public: |
82 public: |
84 RemoveSelfForwardPtrObjClosure(HeapRegion* hr, |
83 RemoveSelfForwardPtrObjClosure(HeapRegion* hr, |
85 UpdateRSetDeferred* update_rset_cl, |
84 UpdateRSetDeferred* update_rset_cl, |
86 bool during_initial_mark, |
85 bool during_initial_mark, |
87 uint worker_id) : |
86 uint worker_id) : |
88 _g1(G1CollectedHeap::heap()), |
87 _g1h(G1CollectedHeap::heap()), |
89 _cm(_g1->concurrent_mark()), |
88 _cm(_g1h->concurrent_mark()), |
90 _hr(hr), |
89 _hr(hr), |
91 _marked_bytes(0), |
90 _marked_bytes(0), |
92 _update_rset_cl(update_rset_cl), |
91 _update_rset_cl(update_rset_cl), |
93 _during_initial_mark(during_initial_mark), |
92 _during_initial_mark(during_initial_mark), |
94 _worker_id(worker_id), |
93 _worker_id(worker_id), |