Mercurial > hg > truffle
diff 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 |
line wrap: on
line diff
--- a/src/share/vm/memory/cardTableRS.cpp Fri Apr 11 09:56:35 2008 -0400 +++ b/src/share/vm/memory/cardTableRS.cpp Sun Apr 13 17:43:42 2008 -0400 @@ -191,7 +191,7 @@ // prev-younger-gen ==> cur_youngergen_and_prev_nonclean_card // cur-younger-gen ==> cur_younger_gen // cur_youngergen_and_prev_nonclean_card ==> no change. -void CardTableRS::write_ref_field_gc_par(oop* field, oop new_val) { +void CardTableRS::write_ref_field_gc_par(void* field, oop new_val) { jbyte* entry = ct_bs()->byte_for(field); do { jbyte entry_val = *entry; @@ -290,28 +290,36 @@ class VerifyCleanCardClosure: public OopClosure { - HeapWord* boundary; - HeapWord* begin; HeapWord* end; -public: - void do_oop(oop* p) { +private: + HeapWord* _boundary; + HeapWord* _begin; + HeapWord* _end; +protected: + template <class T> void do_oop_work(T* p) { HeapWord* jp = (HeapWord*)p; - if (jp >= begin && jp < end) { - guarantee(*p == NULL || (HeapWord*)p < boundary - || (HeapWord*)(*p) >= boundary, + if (jp >= _begin && jp < _end) { + oop obj = oopDesc::load_decode_heap_oop(p); + guarantee(obj == NULL || + (HeapWord*)p < _boundary || + (HeapWord*)obj >= _boundary, "pointer on clean card crosses boundary"); } } - VerifyCleanCardClosure(HeapWord* b, HeapWord* _begin, HeapWord* _end) : - boundary(b), begin(_begin), end(_end) {} +public: + VerifyCleanCardClosure(HeapWord* b, HeapWord* begin, HeapWord* end) : + _boundary(b), _begin(begin), _end(end) {} + virtual void do_oop(oop* p) { VerifyCleanCardClosure::do_oop_work(p); } + virtual void do_oop(narrowOop* p) { VerifyCleanCardClosure::do_oop_work(p); } }; class VerifyCTSpaceClosure: public SpaceClosure { +private: CardTableRS* _ct; HeapWord* _boundary; public: VerifyCTSpaceClosure(CardTableRS* ct, HeapWord* boundary) : _ct(ct), _boundary(boundary) {} - void do_space(Space* s) { _ct->verify_space(s, _boundary); } + virtual void do_space(Space* s) { _ct->verify_space(s, _boundary); } }; class VerifyCTGenClosure: public GenCollectedHeap::GenClosure {