48 protected: |
48 protected: |
49 G1CollectedHeap* _g1; |
49 G1CollectedHeap* _g1; |
50 G1RemSet* _g1_rem; |
50 G1RemSet* _g1_rem; |
51 ConcurrentMark* _cm; |
51 ConcurrentMark* _cm; |
52 G1ParScanThreadState* _par_scan_state; |
52 G1ParScanThreadState* _par_scan_state; |
|
53 bool _during_initial_mark; |
|
54 bool _mark_in_progress; |
53 public: |
55 public: |
54 G1ParClosureSuper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state); |
56 G1ParClosureSuper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state); |
55 bool apply_to_weak_ref_discovered_field() { return true; } |
57 bool apply_to_weak_ref_discovered_field() { return true; } |
56 }; |
58 }; |
57 |
59 |
100 |
102 |
101 |
103 |
102 class G1ParCopyHelper : public G1ParClosureSuper { |
104 class G1ParCopyHelper : public G1ParClosureSuper { |
103 G1ParScanClosure *_scanner; |
105 G1ParScanClosure *_scanner; |
104 protected: |
106 protected: |
105 template <class T> void mark_forwardee(T* p); |
107 template <class T> void mark_object(T* p); |
106 oop copy_to_survivor_space(oop obj); |
108 oop copy_to_survivor_space(oop obj, bool should_mark_copy); |
107 public: |
109 public: |
108 G1ParCopyHelper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state, |
110 G1ParCopyHelper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state, |
109 G1ParScanClosure *scanner) : |
111 G1ParScanClosure *scanner) : |
110 G1ParClosureSuper(g1, par_scan_state), _scanner(scanner) { } |
112 G1ParClosureSuper(g1, par_scan_state), _scanner(scanner) { } |
111 }; |
113 }; |
112 |
114 |
113 template<bool do_gen_barrier, G1Barrier barrier, |
115 template<bool do_gen_barrier, G1Barrier barrier, |
114 bool do_mark_forwardee> |
116 bool do_mark_object> |
115 class G1ParCopyClosure : public G1ParCopyHelper { |
117 class G1ParCopyClosure : public G1ParCopyHelper { |
116 G1ParScanClosure _scanner; |
118 G1ParScanClosure _scanner; |
117 template <class T> void do_oop_work(T* p); |
119 template <class T> void do_oop_work(T* p); |
118 public: |
120 public: |
119 G1ParCopyClosure(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state) : |
121 G1ParCopyClosure(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state) : |
120 _scanner(g1, par_scan_state), G1ParCopyHelper(g1, par_scan_state, &_scanner) { } |
122 _scanner(g1, par_scan_state), G1ParCopyHelper(g1, par_scan_state, &_scanner) { } |
121 template <class T> void do_oop_nv(T* p) { |
123 template <class T> void do_oop_nv(T* p) { |
122 do_oop_work(p); |
124 do_oop_work(p); |
123 if (do_mark_forwardee) |
|
124 mark_forwardee(p); |
|
125 } |
125 } |
126 virtual void do_oop(oop* p) { do_oop_nv(p); } |
126 virtual void do_oop(oop* p) { do_oop_nv(p); } |
127 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } |
127 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } |
128 }; |
128 }; |
129 |
129 |