Mercurial > hg > graal-jvmci-8
comparison src/share/vm/memory/cardTableRS.hpp @ 342:37f87013dfd8
6711316: Open source the Garbage-First garbage collector
Summary: First mercurial integration of the code for the Garbage-First garbage collector.
Reviewed-by: apetrusenko, iveresov, jmasa, sgoldman, tonyp, ysr
author | ysr |
---|---|
date | Thu, 05 Jun 2008 15:57:56 -0700 |
parents | ba764ed4b6f2 |
children | 1ee8caae33af |
comparison
equal
deleted
inserted
replaced
189:0b27f3512f9e | 342:37f87013dfd8 |
---|---|
42 static bool | 42 static bool |
43 card_is_dirty_wrt_gen_iter(jbyte cv) { | 43 card_is_dirty_wrt_gen_iter(jbyte cv) { |
44 return CardTableModRefBS::card_is_dirty_wrt_gen_iter(cv); | 44 return CardTableModRefBS::card_is_dirty_wrt_gen_iter(cv); |
45 } | 45 } |
46 | 46 |
47 CardTableModRefBSForCTRS _ct_bs; | 47 CardTableModRefBSForCTRS* _ct_bs; |
48 | 48 |
49 virtual void younger_refs_in_space_iterate(Space* sp, OopsInGenClosure* cl); | 49 virtual void younger_refs_in_space_iterate(Space* sp, OopsInGenClosure* cl); |
50 | 50 |
51 void verify_space(Space* s, HeapWord* gen_start); | 51 void verify_space(Space* s, HeapWord* gen_start); |
52 | 52 |
71 // always have the value "clean_card".) | 71 // always have the value "clean_card".) |
72 jbyte* _last_cur_val_in_gen; | 72 jbyte* _last_cur_val_in_gen; |
73 | 73 |
74 jbyte _cur_youngergen_card_val; | 74 jbyte _cur_youngergen_card_val; |
75 | 75 |
76 int _regions_to_iterate; | |
77 | |
76 jbyte cur_youngergen_card_val() { | 78 jbyte cur_youngergen_card_val() { |
77 return _cur_youngergen_card_val; | 79 return _cur_youngergen_card_val; |
78 } | 80 } |
79 void set_cur_youngergen_card_val(jbyte v) { | 81 void set_cur_youngergen_card_val(jbyte v) { |
80 _cur_youngergen_card_val = v; | 82 _cur_youngergen_card_val = v; |
94 // *** GenRemSet functions. | 96 // *** GenRemSet functions. |
95 GenRemSet::Name rs_kind() { return GenRemSet::CardTable; } | 97 GenRemSet::Name rs_kind() { return GenRemSet::CardTable; } |
96 | 98 |
97 CardTableRS* as_CardTableRS() { return this; } | 99 CardTableRS* as_CardTableRS() { return this; } |
98 | 100 |
99 CardTableModRefBS* ct_bs() { return &_ct_bs; } | 101 CardTableModRefBS* ct_bs() { return _ct_bs; } |
100 | 102 |
101 // Override. | 103 // Override. |
102 void prepare_for_younger_refs_iterate(bool parallel); | 104 void prepare_for_younger_refs_iterate(bool parallel); |
103 | 105 |
104 // Card table entries are cleared before application; "blk" is | 106 // Card table entries are cleared before application; "blk" is |
105 // responsible for dirtying if the oop is still older-to-younger after | 107 // responsible for dirtying if the oop is still older-to-younger after |
106 // closure application. | 108 // closure application. |
107 void younger_refs_iterate(Generation* g, OopsInGenClosure* blk); | 109 void younger_refs_iterate(Generation* g, OopsInGenClosure* blk); |
108 | 110 |
109 void inline_write_ref_field_gc(void* field, oop new_val) { | 111 void inline_write_ref_field_gc(void* field, oop new_val) { |
110 jbyte* byte = _ct_bs.byte_for(field); | 112 jbyte* byte = _ct_bs->byte_for(field); |
111 *byte = youngergen_card; | 113 *byte = youngergen_card; |
112 } | 114 } |
113 void write_ref_field_gc_work(void* field, oop new_val) { | 115 void write_ref_field_gc_work(void* field, oop new_val) { |
114 inline_write_ref_field_gc(field, new_val); | 116 inline_write_ref_field_gc(field, new_val); |
115 } | 117 } |
120 virtual void write_ref_field_gc_par(void* field, oop new_val); | 122 virtual void write_ref_field_gc_par(void* field, oop new_val); |
121 | 123 |
122 void resize_covered_region(MemRegion new_region); | 124 void resize_covered_region(MemRegion new_region); |
123 | 125 |
124 bool is_aligned(HeapWord* addr) { | 126 bool is_aligned(HeapWord* addr) { |
125 return _ct_bs.is_card_aligned(addr); | 127 return _ct_bs->is_card_aligned(addr); |
126 } | 128 } |
127 | 129 |
128 void verify(); | 130 void verify(); |
129 void verify_aligned_region_empty(MemRegion mr); | 131 void verify_aligned_region_empty(MemRegion mr); |
130 | 132 |
131 void clear(MemRegion mr) { _ct_bs.clear(mr); } | 133 void clear(MemRegion mr) { _ct_bs->clear(mr); } |
132 void clear_into_younger(Generation* gen, bool clear_perm); | 134 void clear_into_younger(Generation* gen, bool clear_perm); |
133 | 135 |
134 void invalidate(MemRegion mr) { _ct_bs.invalidate(mr); } | 136 void invalidate(MemRegion mr, bool whole_heap = false) { |
137 _ct_bs->invalidate(mr, whole_heap); | |
138 } | |
135 void invalidate_or_clear(Generation* gen, bool younger, bool perm); | 139 void invalidate_or_clear(Generation* gen, bool younger, bool perm); |
136 | 140 |
137 static uintx ct_max_alignment_constraint() { | 141 static uintx ct_max_alignment_constraint() { |
138 return CardTableModRefBS::ct_max_alignment_constraint(); | 142 return CardTableModRefBS::ct_max_alignment_constraint(); |
139 } | 143 } |
140 | 144 |
141 jbyte* byte_for(void* p) { return _ct_bs.byte_for(p); } | 145 jbyte* byte_for(void* p) { return _ct_bs->byte_for(p); } |
142 jbyte* byte_after(void* p) { return _ct_bs.byte_after(p); } | 146 jbyte* byte_after(void* p) { return _ct_bs->byte_after(p); } |
143 HeapWord* addr_for(jbyte* p) { return _ct_bs.addr_for(p); } | 147 HeapWord* addr_for(jbyte* p) { return _ct_bs->addr_for(p); } |
144 | 148 |
145 bool is_prev_nonclean_card_val(jbyte v) { | 149 bool is_prev_nonclean_card_val(jbyte v) { |
146 return | 150 return |
147 youngergen_card <= v && | 151 youngergen_card <= v && |
148 v <= cur_youngergen_and_prev_nonclean_card && | 152 v <= cur_youngergen_and_prev_nonclean_card && |