< prev index next >

src/share/vm/gc/g1/g1HeapVerifier.cpp

Print this page
rev 12906 : [mq]: gc_interface

*** 533,546 **** #ifndef PRODUCT class G1VerifyCardTableCleanup: public HeapRegionClosure { G1HeapVerifier* _verifier; ! G1SATBCardTableModRefBS* _ct_bs; public: ! G1VerifyCardTableCleanup(G1HeapVerifier* verifier, G1SATBCardTableModRefBS* ct_bs) ! : _verifier(verifier), _ct_bs(ct_bs) { } virtual bool doHeapRegion(HeapRegion* r) { if (r->is_survivor()) { _verifier->verify_dirty_region(r); } else { _verifier->verify_not_dirty_region(r); --- 533,546 ---- #ifndef PRODUCT class G1VerifyCardTableCleanup: public HeapRegionClosure { G1HeapVerifier* _verifier; ! G1CardTable* _ct; public: ! G1VerifyCardTableCleanup(G1HeapVerifier* verifier, G1CardTable* ct) ! : _verifier(verifier), _ct(ct) { } virtual bool doHeapRegion(HeapRegion* r) { if (r->is_survivor()) { _verifier->verify_dirty_region(r); } else { _verifier->verify_not_dirty_region(r);
*** 549,584 **** } }; void G1HeapVerifier::verify_card_table_cleanup() { if (G1VerifyCTCleanup || VerifyAfterGC) { ! G1VerifyCardTableCleanup cleanup_verifier(this, _g1h->g1_barrier_set()); _g1h->heap_region_iterate(&cleanup_verifier); } } void G1HeapVerifier::verify_not_dirty_region(HeapRegion* hr) { // All of the region should be clean. ! G1SATBCardTableModRefBS* ct_bs = _g1h->g1_barrier_set(); MemRegion mr(hr->bottom(), hr->end()); ! ct_bs->verify_not_dirty_region(mr); } void G1HeapVerifier::verify_dirty_region(HeapRegion* hr) { // We cannot guarantee that [bottom(),end()] is dirty. Threads // dirty allocated blocks as they allocate them. The thread that // retires each region and replaces it with a new one will do a // maximal allocation to fill in [pre_dummy_top(),end()] but will // not dirty that area (one less thing to have to do while holding // a lock). So we can only verify that [bottom(),pre_dummy_top()] // is dirty. ! G1SATBCardTableModRefBS* ct_bs = _g1h->g1_barrier_set(); MemRegion mr(hr->bottom(), hr->pre_dummy_top()); if (hr->is_young()) { ! ct_bs->verify_g1_young_region(mr); } else { ! ct_bs->verify_dirty_region(mr); } } class G1VerifyDirtyYoungListClosure : public HeapRegionClosure { private: --- 549,584 ---- } }; void G1HeapVerifier::verify_card_table_cleanup() { if (G1VerifyCTCleanup || VerifyAfterGC) { ! G1VerifyCardTableCleanup cleanup_verifier(this, _g1h->g1_card_table()); _g1h->heap_region_iterate(&cleanup_verifier); } } void G1HeapVerifier::verify_not_dirty_region(HeapRegion* hr) { // All of the region should be clean. ! G1CardTable* ct = _g1h->g1_card_table(); MemRegion mr(hr->bottom(), hr->end()); ! ct->verify_not_dirty_region(mr); } void G1HeapVerifier::verify_dirty_region(HeapRegion* hr) { // We cannot guarantee that [bottom(),end()] is dirty. Threads // dirty allocated blocks as they allocate them. The thread that // retires each region and replaces it with a new one will do a // maximal allocation to fill in [pre_dummy_top(),end()] but will // not dirty that area (one less thing to have to do while holding // a lock). So we can only verify that [bottom(),pre_dummy_top()] // is dirty. ! G1CardTable* ct = _g1h->g1_card_table(); MemRegion mr(hr->bottom(), hr->pre_dummy_top()); if (hr->is_young()) { ! ct->verify_g1_young_region(mr); } else { ! ct->verify_dirty_region(mr); } } class G1VerifyDirtyYoungListClosure : public HeapRegionClosure { private:
< prev index next >