hotspot/src/share/vm/memory/cardTableRS.cpp
changeset 360 21d113ecbf6a
parent 179 59e3abf83f72
child 670 ddf3e9583f2f
child 1374 4c24294029a9
equal deleted inserted replaced
357:f4edb0d9f109 360:21d113ecbf6a
   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: