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 &&