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: