< prev index next >

src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp

Print this page




2333   assert(_restart_addr == NULL, "Expected pre-condition");
2334   verification_mark_bm()->iterate(&markFromRootsClosure);
2335   while (_restart_addr != NULL) {
2336     // Deal with stack overflow: by restarting at the indicated
2337     // address.
2338     HeapWord* ra = _restart_addr;
2339     markFromRootsClosure.reset(ra);
2340     _restart_addr = NULL;
2341     verification_mark_bm()->iterate(&markFromRootsClosure, ra, _span.end());
2342   }
2343   assert(verification_mark_stack()->isEmpty(), "Should have been drained");
2344   verify_work_stacks_empty();
2345 
2346   // Marking completed -- now verify that each bit marked in
2347   // verification_mark_bm() is also marked in markBitMap(); flag all
2348   // errors by printing corresponding objects.
2349   VerifyMarkedClosure vcl(markBitMap());
2350   verification_mark_bm()->iterate(&vcl);
2351   if (vcl.failed()) {
2352     LogHandle(gc, verify) log;
2353     log.error("Verification failed");
2354     ResourceMark rm;
2355     gch->print_on(log.error_stream());
2356     fatal("CMS: failed marking verification after remark");
2357   }
2358 }
2359 
2360 class VerifyKlassOopsKlassClosure : public KlassClosure {
2361   class VerifyKlassOopsClosure : public OopClosure {
2362     CMSBitMap* _bitmap;
2363    public:
2364     VerifyKlassOopsClosure(CMSBitMap* bitmap) : _bitmap(bitmap) { }
2365     void do_oop(oop* p)       { guarantee(*p == NULL || _bitmap->isMarked((HeapWord*) *p), "Should be marked"); }
2366     void do_oop(narrowOop* p) { ShouldNotReachHere(); }
2367   } _oop_closure;
2368  public:
2369   VerifyKlassOopsKlassClosure(CMSBitMap* bitmap) : _oop_closure(bitmap) {}
2370   void do_klass(Klass* k) {
2371     k->oops_do(&_oop_closure);
2372   }
2373 };




2333   assert(_restart_addr == NULL, "Expected pre-condition");
2334   verification_mark_bm()->iterate(&markFromRootsClosure);
2335   while (_restart_addr != NULL) {
2336     // Deal with stack overflow: by restarting at the indicated
2337     // address.
2338     HeapWord* ra = _restart_addr;
2339     markFromRootsClosure.reset(ra);
2340     _restart_addr = NULL;
2341     verification_mark_bm()->iterate(&markFromRootsClosure, ra, _span.end());
2342   }
2343   assert(verification_mark_stack()->isEmpty(), "Should have been drained");
2344   verify_work_stacks_empty();
2345 
2346   // Marking completed -- now verify that each bit marked in
2347   // verification_mark_bm() is also marked in markBitMap(); flag all
2348   // errors by printing corresponding objects.
2349   VerifyMarkedClosure vcl(markBitMap());
2350   verification_mark_bm()->iterate(&vcl);
2351   if (vcl.failed()) {
2352     LogHandle(gc, verify) log;
2353     log.error("Failed marking verification after remark");
2354     ResourceMark rm;
2355     gch->print_on(log.error_stream());
2356     fatal("CMS: failed marking verification after remark");
2357   }
2358 }
2359 
2360 class VerifyKlassOopsKlassClosure : public KlassClosure {
2361   class VerifyKlassOopsClosure : public OopClosure {
2362     CMSBitMap* _bitmap;
2363    public:
2364     VerifyKlassOopsClosure(CMSBitMap* bitmap) : _bitmap(bitmap) { }
2365     void do_oop(oop* p)       { guarantee(*p == NULL || _bitmap->isMarked((HeapWord*) *p), "Should be marked"); }
2366     void do_oop(narrowOop* p) { ShouldNotReachHere(); }
2367   } _oop_closure;
2368  public:
2369   VerifyKlassOopsKlassClosure(CMSBitMap* bitmap) : _oop_closure(bitmap) {}
2370   void do_klass(Klass* k) {
2371     k->oops_do(&_oop_closure);
2372   }
2373 };


< prev index next >