Mercurial > hg > truffle
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; |