comparison src/share/vm/gc_implementation/g1/g1OopClosures.hpp @ 3886:eeae91c9baba

7080389: G1: refactor marking code in evacuation pause copy closures Summary: Refactor code marking code in the evacuation pause copy closures so that an evacuated object is only marked by the thread that successfully copies it. Reviewed-by: stefank, brutisso, tonyp
author johnc
date Mon, 29 Aug 2011 10:13:06 -0700
parents 842b840e67db
children 663cb89032b1
comparison
equal deleted inserted replaced
3885:3cd0157e1d4d 3886:eeae91c9baba
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