comparison src/share/vm/gc_implementation/g1/g1OopClosures.hpp @ 17687:86b64209f715

8027559: Decrease code size and templatizing in G1ParCopyClosure::do_oop_work Summary: Move methods that are not dependent on any of G1ParCopyClosure's template parameters into G1ParCopyHelper. Further remove unused methods and members of the class hierarchy. Reviewed-by: mgerdin, stefank
author tschatzl
date Wed, 26 Feb 2014 15:32:40 +0100
parents 5a9a209853bf
children 97300b6165f8
comparison
equal deleted inserted replaced
17686:d69952503db0 17687:86b64209f715
46 }; 46 };
47 47
48 class G1ParClosureSuper : public OopsInHeapRegionClosure { 48 class G1ParClosureSuper : public OopsInHeapRegionClosure {
49 protected: 49 protected:
50 G1CollectedHeap* _g1; 50 G1CollectedHeap* _g1;
51 G1RemSet* _g1_rem;
52 ConcurrentMark* _cm;
53 G1ParScanThreadState* _par_scan_state; 51 G1ParScanThreadState* _par_scan_state;
54 uint _worker_id; 52 uint _worker_id;
55 bool _during_initial_mark;
56 bool _mark_in_progress;
57 public: 53 public:
58 G1ParClosureSuper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state); 54 G1ParClosureSuper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state);
59 bool apply_to_weak_ref_discovered_field() { return true; } 55 bool apply_to_weak_ref_discovered_field() { return true; }
60 }; 56 };
61 57
131 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } 127 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
132 }; 128 };
133 129
134 // Add back base class for metadata 130 // Add back base class for metadata
135 class G1ParCopyHelper : public G1ParClosureSuper { 131 class G1ParCopyHelper : public G1ParClosureSuper {
132 protected:
136 Klass* _scanned_klass; 133 Klass* _scanned_klass;
137 134 ConcurrentMark* _cm;
135
136 // Mark the object if it's not already marked. This is used to mark
137 // objects pointed to by roots that are guaranteed not to move
138 // during the GC (i.e., non-CSet objects). It is MT-safe.
139 void mark_object(oop obj);
140
141 // Mark the object if it's not already marked. This is used to mark
142 // objects pointed to by roots that have been forwarded during a
143 // GC. It is MT-safe.
144 void mark_forwarded_object(oop from_obj, oop to_obj);
138 public: 145 public:
139 G1ParCopyHelper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state) : 146 G1ParCopyHelper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state);
140 _scanned_klass(NULL),
141 G1ParClosureSuper(g1, par_scan_state) {}
142 147
143 void set_scanned_klass(Klass* k) { _scanned_klass = k; } 148 void set_scanned_klass(Klass* k) { _scanned_klass = k; }
144 template <class T> void do_klass_barrier(T* p, oop new_obj); 149 template <class T> void do_klass_barrier(T* p, oop new_obj);
145 }; 150 };
146 151
148 class G1ParCopyClosure : public G1ParCopyHelper { 153 class G1ParCopyClosure : public G1ParCopyHelper {
149 G1ParScanClosure _scanner; 154 G1ParScanClosure _scanner;
150 template <class T> void do_oop_work(T* p); 155 template <class T> void do_oop_work(T* p);
151 156
152 protected: 157 protected:
153 // Mark the object if it's not already marked. This is used to mark
154 // objects pointed to by roots that are guaranteed not to move
155 // during the GC (i.e., non-CSet objects). It is MT-safe.
156 void mark_object(oop obj);
157
158 // Mark the object if it's not already marked. This is used to mark
159 // objects pointed to by roots that have been forwarded during a
160 // GC. It is MT-safe.
161 void mark_forwarded_object(oop from_obj, oop to_obj);
162
163 oop copy_to_survivor_space(oop obj); 158 oop copy_to_survivor_space(oop obj);
164 159
165 public: 160 public:
166 G1ParCopyClosure(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state, 161 G1ParCopyClosure(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state,
167 ReferenceProcessor* rp) : 162 ReferenceProcessor* rp) :
170 assert(_ref_processor == NULL, "sanity"); 165 assert(_ref_processor == NULL, "sanity");
171 } 166 }
172 167
173 G1ParScanClosure* scanner() { return &_scanner; } 168 G1ParScanClosure* scanner() { return &_scanner; }
174 169
175 template <class T> void do_oop_nv(T* p) { 170 template <class T> void do_oop_nv(T* p) { do_oop_work(p); }
176 do_oop_work(p);
177 }
178 virtual void do_oop(oop* p) { do_oop_nv(p); } 171 virtual void do_oop(oop* p) { do_oop_nv(p); }
179 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } 172 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
180 }; 173 };
181 174
182 typedef G1ParCopyClosure<G1BarrierNone, false> G1ParScanExtRootClosure; 175 typedef G1ParCopyClosure<G1BarrierNone, false> G1ParScanExtRootClosure;