16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_GC_G1_G1REMSET_HPP
26 #define SHARE_VM_GC_G1_G1REMSET_HPP
27
28 #include "gc/g1/g1RemSetSummary.hpp"
29
30 // A G1RemSet provides ways of iterating over pointers into a selected
31 // collection set.
32
33 class G1CollectedHeap;
34 class ConcurrentG1Refine;
35 class G1ParPushHeapRSClosure;
36
37 // A G1RemSet in which each heap region has a rem set that records the
38 // external heap references into it. Uses a mod ref bs to track updates,
39 // so that they can be used to update the individual region remsets.
40
41 class G1RemSet: public CHeapObj<mtGC> {
42 private:
43 G1RemSetSummary _prev_period_summary;
44
45 // A DirtyCardQueueSet that is used to hold cards that contain
46 // references into the current collection set. This is used to
47 // update the remembered sets of the regions in the collection
48 // set in the event of an evacuation failure.
49 DirtyCardQueueSet _into_cset_dirty_card_queue_set;
50
51 protected:
52 G1CollectedHeap* _g1;
53 size_t _conc_refine_cards;
54 uint n_workers();
55
56 protected:
57 enum SomePrivateConstants {
58 UpdateRStoMergeSync = 0,
59 MergeRStoDoDirtySync = 1,
60 DoDirtySync = 2,
61 LastSync = 3,
62
63 SeqTask = 0,
64 NumSeqTasks = 1
65 };
66
67 CardTableModRefBS* _ct_bs;
68 G1CollectorPolicy* _g1p;
69
70 ConcurrentG1Refine* _cg1r;
71
72 // Used for caching the closure that is responsible for scanning
73 // references into the collection set.
74 G1ParPushHeapRSClosure** _cset_rs_update_cl;
75
76 // Print the given summary info
77 virtual void print_summary_info(G1RemSetSummary * summary, const char * header = NULL);
78 public:
79 // This is called to reset dual hash tables after the gc pause
80 // is finished and the initial hash table is no longer being
81 // scanned.
82 void cleanupHRRS();
83
84 G1RemSet(G1CollectedHeap* g1, CardTableModRefBS* ct_bs);
85 ~G1RemSet();
86
87 // Invoke "blk->do_oop" on all pointers into the collection set
88 // from objects in regions outside the collection set (having
89 // invoked "blk->set_region" to set the "from" region correctly
90 // beforehand.)
91 //
92 // Apply non_heap_roots on the oops of the unmarked nmethods
93 // on the strong code roots list for each region in the
94 // collection set.
95 //
96 // The "worker_i" param is for the parallel case where the id
97 // of the worker thread calling this function can be helpful in
129 // Requires "region_bm" and "card_bm" to be bitmaps with 1 bit per region
130 // or card, respectively, such that a region or card with a corresponding
131 // 0 bit contains no part of any live object. Eliminates any remembered
132 // set entries that correspond to dead heap ranges. "worker_num" is the
133 // parallel thread id of the current thread, and "hrclaimer" is the
134 // HeapRegionClaimer that should be used.
135 void scrub(BitMap* region_bm, BitMap* card_bm, uint worker_num, HeapRegionClaimer* hrclaimer);
136
137 // Refine the card corresponding to "card_ptr".
138 // If check_for_refs_into_cset is true, a true result is returned
139 // if the given card contains oops that have references into the
140 // current collection set.
141 virtual bool refine_card(jbyte* card_ptr,
142 uint worker_i,
143 bool check_for_refs_into_cset);
144
145 // Print accumulated summary info from the start of the VM.
146 virtual void print_summary_info();
147
148 // Print accumulated summary info from the last time called.
149 virtual void print_periodic_summary_info(const char* header);
150
151 // Prepare remembered set for verification.
152 virtual void prepare_for_verify();
153
154 size_t conc_refine_cards() const {
155 return _conc_refine_cards;
156 }
157 };
158
159 class UpdateRSOopClosure: public ExtendedOopClosure {
160 HeapRegion* _from;
161 G1RemSet* _rs;
162 uint _worker_i;
163
164 template <class T> void do_oop_work(T* p);
165
166 public:
167 UpdateRSOopClosure(G1RemSet* rs, uint worker_i = 0) :
168 _from(NULL), _rs(rs), _worker_i(worker_i)
169 {}
|
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_GC_G1_G1REMSET_HPP
26 #define SHARE_VM_GC_G1_G1REMSET_HPP
27
28 #include "gc/g1/g1RemSetSummary.hpp"
29
30 // A G1RemSet provides ways of iterating over pointers into a selected
31 // collection set.
32
33 class G1CollectedHeap;
34 class ConcurrentG1Refine;
35 class G1ParPushHeapRSClosure;
36 class outputStream;
37
38 // A G1RemSet in which each heap region has a rem set that records the
39 // external heap references into it. Uses a mod ref bs to track updates,
40 // so that they can be used to update the individual region remsets.
41
42 class G1RemSet: public CHeapObj<mtGC> {
43 private:
44 G1RemSetSummary _prev_period_summary;
45
46 // A DirtyCardQueueSet that is used to hold cards that contain
47 // references into the current collection set. This is used to
48 // update the remembered sets of the regions in the collection
49 // set in the event of an evacuation failure.
50 DirtyCardQueueSet _into_cset_dirty_card_queue_set;
51
52 protected:
53 G1CollectedHeap* _g1;
54 size_t _conc_refine_cards;
55 uint n_workers();
56
57 protected:
58 enum SomePrivateConstants {
59 UpdateRStoMergeSync = 0,
60 MergeRStoDoDirtySync = 1,
61 DoDirtySync = 2,
62 LastSync = 3,
63
64 SeqTask = 0,
65 NumSeqTasks = 1
66 };
67
68 CardTableModRefBS* _ct_bs;
69 G1CollectorPolicy* _g1p;
70
71 ConcurrentG1Refine* _cg1r;
72
73 // Used for caching the closure that is responsible for scanning
74 // references into the collection set.
75 G1ParPushHeapRSClosure** _cset_rs_update_cl;
76
77 public:
78 // This is called to reset dual hash tables after the gc pause
79 // is finished and the initial hash table is no longer being
80 // scanned.
81 void cleanupHRRS();
82
83 G1RemSet(G1CollectedHeap* g1, CardTableModRefBS* ct_bs);
84 ~G1RemSet();
85
86 // Invoke "blk->do_oop" on all pointers into the collection set
87 // from objects in regions outside the collection set (having
88 // invoked "blk->set_region" to set the "from" region correctly
89 // beforehand.)
90 //
91 // Apply non_heap_roots on the oops of the unmarked nmethods
92 // on the strong code roots list for each region in the
93 // collection set.
94 //
95 // The "worker_i" param is for the parallel case where the id
96 // of the worker thread calling this function can be helpful in
128 // Requires "region_bm" and "card_bm" to be bitmaps with 1 bit per region
129 // or card, respectively, such that a region or card with a corresponding
130 // 0 bit contains no part of any live object. Eliminates any remembered
131 // set entries that correspond to dead heap ranges. "worker_num" is the
132 // parallel thread id of the current thread, and "hrclaimer" is the
133 // HeapRegionClaimer that should be used.
134 void scrub(BitMap* region_bm, BitMap* card_bm, uint worker_num, HeapRegionClaimer* hrclaimer);
135
136 // Refine the card corresponding to "card_ptr".
137 // If check_for_refs_into_cset is true, a true result is returned
138 // if the given card contains oops that have references into the
139 // current collection set.
140 virtual bool refine_card(jbyte* card_ptr,
141 uint worker_i,
142 bool check_for_refs_into_cset);
143
144 // Print accumulated summary info from the start of the VM.
145 virtual void print_summary_info();
146
147 // Print accumulated summary info from the last time called.
148 virtual void print_periodic_summary_info(const char* header, uint period_count);
149
150 // Prepare remembered set for verification.
151 virtual void prepare_for_verify();
152
153 size_t conc_refine_cards() const {
154 return _conc_refine_cards;
155 }
156 };
157
158 class UpdateRSOopClosure: public ExtendedOopClosure {
159 HeapRegion* _from;
160 G1RemSet* _rs;
161 uint _worker_i;
162
163 template <class T> void do_oop_work(T* p);
164
165 public:
166 UpdateRSOopClosure(G1RemSet* rs, uint worker_i = 0) :
167 _from(NULL), _rs(rs), _worker_i(worker_i)
168 {}
|