104
105 G1ParCopyHelper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state);
106 ~G1ParCopyHelper() { }
107
108 public:
109 void set_scanned_klass(Klass* k) { _scanned_klass = k; }
110 template <class T> inline void do_klass_barrier(T* p, oop new_obj);
111 };
112
113 enum G1Barrier {
114 G1BarrierNone,
115 G1BarrierKlass
116 };
117
118 enum G1Mark {
119 G1MarkNone,
120 G1MarkFromRoot,
121 G1MarkPromotedFromRoot
122 };
123
124 template <G1Barrier barrier, G1Mark do_mark_object>
125 class G1ParCopyClosure : public G1ParCopyHelper {
126 public:
127 G1ParCopyClosure(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state) :
128 G1ParCopyHelper(g1, par_scan_state) {
129 assert(ref_processor() == NULL, "sanity");
130 }
131
132 template <class T> void do_oop_nv(T* p);
133 virtual void do_oop(oop* p) { do_oop_nv(p); }
134 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
135 };
136
137 class G1KlassScanClosure : public KlassClosure {
138 G1ParCopyHelper* _closure;
139 bool _process_only_dirty;
140 int _count;
141 public:
142 G1KlassScanClosure(G1ParCopyHelper* closure, bool process_only_dirty)
143 : _process_only_dirty(process_only_dirty), _closure(closure), _count(0) {}
144 void do_klass(Klass* klass);
|
104
105 G1ParCopyHelper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state);
106 ~G1ParCopyHelper() { }
107
108 public:
109 void set_scanned_klass(Klass* k) { _scanned_klass = k; }
110 template <class T> inline void do_klass_barrier(T* p, oop new_obj);
111 };
112
113 enum G1Barrier {
114 G1BarrierNone,
115 G1BarrierKlass
116 };
117
118 enum G1Mark {
119 G1MarkNone,
120 G1MarkFromRoot,
121 G1MarkPromotedFromRoot
122 };
123
124 template <G1Barrier barrier, G1Mark do_mark_object, bool use_ext>
125 class G1ParCopyClosure : public G1ParCopyHelper {
126 public:
127 G1ParCopyClosure(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state) :
128 G1ParCopyHelper(g1, par_scan_state) {
129 assert(ref_processor() == NULL, "sanity");
130 }
131
132 template <class T> void do_oop_nv(T* p);
133 virtual void do_oop(oop* p) { do_oop_nv(p); }
134 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
135 };
136
137 class G1KlassScanClosure : public KlassClosure {
138 G1ParCopyHelper* _closure;
139 bool _process_only_dirty;
140 int _count;
141 public:
142 G1KlassScanClosure(G1ParCopyHelper* closure, bool process_only_dirty)
143 : _process_only_dirty(process_only_dirty), _closure(closure), _count(0) {}
144 void do_klass(Klass* klass);
|