comparison src/share/vm/gc_implementation/g1/g1OopClosures.hpp @ 20804:7848fc12602b

Merge with jdk8u40-b25
author Gilles Duboscq <gilles.m.duboscq@oracle.com>
date Tue, 07 Apr 2015 14:58:49 +0200
parents 52b4284cb496 2c6ef90f030a
children
comparison
equal deleted inserted replaced
20184:84105dcdb05b 20804:7848fc12602b
22 * 22 *
23 */ 23 */
24 24
25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_HPP 25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_HPP
26 #define SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_HPP 26 #define SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_HPP
27
28 #include "memory/iterator.hpp"
27 29
28 class HeapRegion; 30 class HeapRegion;
29 class G1CollectedHeap; 31 class G1CollectedHeap;
30 class G1RemSet; 32 class G1RemSet;
31 class ConcurrentMark; 33 class ConcurrentMark;
49 protected: 51 protected:
50 G1CollectedHeap* _g1; 52 G1CollectedHeap* _g1;
51 G1ParScanThreadState* _par_scan_state; 53 G1ParScanThreadState* _par_scan_state;
52 uint _worker_id; 54 uint _worker_id;
53 public: 55 public:
56 // Initializes the instance, leaving _par_scan_state uninitialized. Must be done
57 // later using the set_par_scan_thread_state() method.
58 G1ParClosureSuper(G1CollectedHeap* g1);
54 G1ParClosureSuper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state); 59 G1ParClosureSuper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state);
55 bool apply_to_weak_ref_discovered_field() { return true; } 60 bool apply_to_weak_ref_discovered_field() { return true; }
61
62 void set_par_scan_thread_state(G1ParScanThreadState* par_scan_state);
56 }; 63 };
57 64
58 class G1ParPushHeapRSClosure : public G1ParClosureSuper { 65 class G1ParPushHeapRSClosure : public G1ParClosureSuper {
59 public: 66 public:
60 G1ParPushHeapRSClosure(G1CollectedHeap* g1, 67 G1ParPushHeapRSClosure(G1CollectedHeap* g1,
66 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } 73 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
67 }; 74 };
68 75
69 class G1ParScanClosure : public G1ParClosureSuper { 76 class G1ParScanClosure : public G1ParClosureSuper {
70 public: 77 public:
71 G1ParScanClosure(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state, ReferenceProcessor* rp) : 78 G1ParScanClosure(G1CollectedHeap* g1, ReferenceProcessor* rp) :
72 G1ParClosureSuper(g1, par_scan_state) 79 G1ParClosureSuper(g1) {
73 {
74 assert(_ref_processor == NULL, "sanity"); 80 assert(_ref_processor == NULL, "sanity");
75 _ref_processor = rp; 81 _ref_processor = rp;
76 } 82 }
77 83
78 template <class T> void do_oop_nv(T* p); 84 template <class T> void do_oop_nv(T* p);
100 106
101 void set_scanned_klass(Klass* k) { _scanned_klass = k; } 107 void set_scanned_klass(Klass* k) { _scanned_klass = k; }
102 template <class T> void do_klass_barrier(T* p, oop new_obj); 108 template <class T> void do_klass_barrier(T* p, oop new_obj);
103 }; 109 };
104 110
105 template <G1Barrier barrier, bool do_mark_object> 111 template <G1Barrier barrier, G1Mark do_mark_object>
106 class G1ParCopyClosure : public G1ParCopyHelper { 112 class G1ParCopyClosure : public G1ParCopyHelper {
107 private: 113 private:
108 template <class T> void do_oop_work(T* p); 114 template <class T> void do_oop_work(T* p);
109 115
110 public: 116 public:
115 } 121 }
116 122
117 template <class T> void do_oop_nv(T* p) { do_oop_work(p); } 123 template <class T> void do_oop_nv(T* p) { do_oop_work(p); }
118 virtual void do_oop(oop* p) { do_oop_nv(p); } 124 virtual void do_oop(oop* p) { do_oop_nv(p); }
119 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } 125 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
120 }; 126
121 127 G1CollectedHeap* g1() { return _g1; };
122 typedef G1ParCopyClosure<G1BarrierNone, false> G1ParScanExtRootClosure; 128 G1ParScanThreadState* pss() { return _par_scan_state; }
123 typedef G1ParCopyClosure<G1BarrierKlass, false> G1ParScanMetadataClosure; 129 ReferenceProcessor* rp() { return _ref_processor; };
124 130 };
125 131
126 typedef G1ParCopyClosure<G1BarrierNone, true> G1ParScanAndMarkExtRootClosure; 132 typedef G1ParCopyClosure<G1BarrierNone, G1MarkNone> G1ParScanExtRootClosure;
127 typedef G1ParCopyClosure<G1BarrierKlass, true> G1ParScanAndMarkMetadataClosure; 133 typedef G1ParCopyClosure<G1BarrierNone, G1MarkFromRoot> G1ParScanAndMarkExtRootClosure;
128 134 typedef G1ParCopyClosure<G1BarrierNone, G1MarkPromotedFromRoot> G1ParScanAndMarkWeakExtRootClosure;
129 // We use a separate closure to handle references during evacuation 135 // We use a separate closure to handle references during evacuation
130 // failure processing. 136 // failure processing.
131 137
132 typedef G1ParCopyClosure<G1BarrierEvac, false> G1ParScanHeapEvacFailureClosure; 138 typedef G1ParCopyClosure<G1BarrierEvac, G1MarkNone> G1ParScanHeapEvacFailureClosure;
133 139
134 class FilterIntoCSClosure: public ExtendedOopClosure { 140 class FilterIntoCSClosure: public ExtendedOopClosure {
135 G1CollectedHeap* _g1; 141 G1CollectedHeap* _g1;
136 OopClosure* _oc; 142 OopClosure* _oc;
137 DirtyCardToOopClosure* _dcto_cl; 143 DirtyCardToOopClosure* _dcto_cl;
158 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } 164 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
159 bool apply_to_weak_ref_discovered_field() { return true; } 165 bool apply_to_weak_ref_discovered_field() { return true; }
160 }; 166 };
161 167
162 // Closure for iterating over object fields during concurrent marking 168 // Closure for iterating over object fields during concurrent marking
163 class G1CMOopClosure : public ExtendedOopClosure { 169 class G1CMOopClosure : public MetadataAwareOopClosure {
170 protected:
171 ConcurrentMark* _cm;
164 private: 172 private:
165 G1CollectedHeap* _g1h; 173 G1CollectedHeap* _g1h;
166 ConcurrentMark* _cm;
167 CMTask* _task; 174 CMTask* _task;
168 public: 175 public:
169 G1CMOopClosure(G1CollectedHeap* g1h, ConcurrentMark* cm, CMTask* task); 176 G1CMOopClosure(G1CollectedHeap* g1h, ConcurrentMark* cm, CMTask* task);
170 template <class T> void do_oop_nv(T* p); 177 template <class T> void do_oop_nv(T* p);
171 virtual void do_oop( oop* p) { do_oop_nv(p); } 178 virtual void do_oop( oop* p) { do_oop_nv(p); }
172 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } 179 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
173 }; 180 };
174 181
175 // Closure to scan the root regions during concurrent marking 182 // Closure to scan the root regions during concurrent marking
176 class G1RootRegionScanClosure : public ExtendedOopClosure { 183 class G1RootRegionScanClosure : public MetadataAwareOopClosure {
177 private: 184 private:
178 G1CollectedHeap* _g1h; 185 G1CollectedHeap* _g1h;
179 ConcurrentMark* _cm; 186 ConcurrentMark* _cm;
180 uint _worker_id; 187 uint _worker_id;
181 public: 188 public: