Mercurial > hg > truffle
comparison src/share/vm/memory/cardTableRS.cpp @ 113:ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv
Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author | coleenp |
---|---|
date | Sun, 13 Apr 2008 17:43:42 -0400 |
parents | 73e96e5c30df |
children | d1605aabd0a1 37f87013dfd8 |
comparison
equal
deleted
inserted
replaced
110:a49a647afe9a | 113:ba764ed4b6f2 |
---|---|
189 // dirty ==> cur_youngergen_and_prev_nonclean_card | 189 // dirty ==> cur_youngergen_and_prev_nonclean_card |
190 // precleaned ==> cur_youngergen_and_prev_nonclean_card | 190 // precleaned ==> cur_youngergen_and_prev_nonclean_card |
191 // prev-younger-gen ==> cur_youngergen_and_prev_nonclean_card | 191 // prev-younger-gen ==> cur_youngergen_and_prev_nonclean_card |
192 // cur-younger-gen ==> cur_younger_gen | 192 // cur-younger-gen ==> cur_younger_gen |
193 // cur_youngergen_and_prev_nonclean_card ==> no change. | 193 // cur_youngergen_and_prev_nonclean_card ==> no change. |
194 void CardTableRS::write_ref_field_gc_par(oop* field, oop new_val) { | 194 void CardTableRS::write_ref_field_gc_par(void* field, oop new_val) { |
195 jbyte* entry = ct_bs()->byte_for(field); | 195 jbyte* entry = ct_bs()->byte_for(field); |
196 do { | 196 do { |
197 jbyte entry_val = *entry; | 197 jbyte entry_val = *entry; |
198 // We put this first because it's probably the most common case. | 198 // We put this first because it's probably the most common case. |
199 if (entry_val == clean_card_val()) { | 199 if (entry_val == clean_card_val()) { |
288 } | 288 } |
289 } | 289 } |
290 | 290 |
291 | 291 |
292 class VerifyCleanCardClosure: public OopClosure { | 292 class VerifyCleanCardClosure: public OopClosure { |
293 HeapWord* boundary; | 293 private: |
294 HeapWord* begin; HeapWord* end; | 294 HeapWord* _boundary; |
295 HeapWord* _begin; | |
296 HeapWord* _end; | |
297 protected: | |
298 template <class T> void do_oop_work(T* p) { | |
299 HeapWord* jp = (HeapWord*)p; | |
300 if (jp >= _begin && jp < _end) { | |
301 oop obj = oopDesc::load_decode_heap_oop(p); | |
302 guarantee(obj == NULL || | |
303 (HeapWord*)p < _boundary || | |
304 (HeapWord*)obj >= _boundary, | |
305 "pointer on clean card crosses boundary"); | |
306 } | |
307 } | |
295 public: | 308 public: |
296 void do_oop(oop* p) { | 309 VerifyCleanCardClosure(HeapWord* b, HeapWord* begin, HeapWord* end) : |
297 HeapWord* jp = (HeapWord*)p; | 310 _boundary(b), _begin(begin), _end(end) {} |
298 if (jp >= begin && jp < end) { | 311 virtual void do_oop(oop* p) { VerifyCleanCardClosure::do_oop_work(p); } |
299 guarantee(*p == NULL || (HeapWord*)p < boundary | 312 virtual void do_oop(narrowOop* p) { VerifyCleanCardClosure::do_oop_work(p); } |
300 || (HeapWord*)(*p) >= boundary, | |
301 "pointer on clean card crosses boundary"); | |
302 } | |
303 } | |
304 VerifyCleanCardClosure(HeapWord* b, HeapWord* _begin, HeapWord* _end) : | |
305 boundary(b), begin(_begin), end(_end) {} | |
306 }; | 313 }; |
307 | 314 |
308 class VerifyCTSpaceClosure: public SpaceClosure { | 315 class VerifyCTSpaceClosure: public SpaceClosure { |
316 private: | |
309 CardTableRS* _ct; | 317 CardTableRS* _ct; |
310 HeapWord* _boundary; | 318 HeapWord* _boundary; |
311 public: | 319 public: |
312 VerifyCTSpaceClosure(CardTableRS* ct, HeapWord* boundary) : | 320 VerifyCTSpaceClosure(CardTableRS* ct, HeapWord* boundary) : |
313 _ct(ct), _boundary(boundary) {} | 321 _ct(ct), _boundary(boundary) {} |
314 void do_space(Space* s) { _ct->verify_space(s, _boundary); } | 322 virtual void do_space(Space* s) { _ct->verify_space(s, _boundary); } |
315 }; | 323 }; |
316 | 324 |
317 class VerifyCTGenClosure: public GenCollectedHeap::GenClosure { | 325 class VerifyCTGenClosure: public GenCollectedHeap::GenClosure { |
318 CardTableRS* _ct; | 326 CardTableRS* _ct; |
319 public: | 327 public: |