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