< prev index next >

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

Print this page




 667 
 668     const char* cname =
 669          PerfDataManager::counter_name(_gen_counters->name_space(), "threads");
 670     PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_None,
 671                                      ParallelGCThreads, CHECK);
 672   }
 673 }
 674 
 675 // ParNewGeneration::
 676 ParKeepAliveClosure::ParKeepAliveClosure(ParScanWeakRefClosure* cl) :
 677   DefNewGeneration::KeepAliveClosure(cl), _par_cl(cl) {}
 678 
 679 template <class T>
 680 void /*ParNewGeneration::*/ParKeepAliveClosure::do_oop_work(T* p) {
 681 #ifdef ASSERT
 682   {
 683     assert(!oopDesc::is_null(*p), "expected non-null ref");
 684     oop obj = oopDesc::load_decode_heap_oop_not_null(p);
 685     // We never expect to see a null reference being processed
 686     // as a weak reference.
 687     assert(obj->is_oop(), "expected an oop while scanning weak refs");
 688   }
 689 #endif // ASSERT
 690 
 691   _par_cl->do_oop_nv(p);
 692 
 693   if (GenCollectedHeap::heap()->is_in_reserved(p)) {
 694     oop obj = oopDesc::load_decode_heap_oop_not_null(p);
 695     _rs->write_ref_field_gc_par(p, obj);
 696   }
 697 }
 698 
 699 void /*ParNewGeneration::*/ParKeepAliveClosure::do_oop(oop* p)       { ParKeepAliveClosure::do_oop_work(p); }
 700 void /*ParNewGeneration::*/ParKeepAliveClosure::do_oop(narrowOop* p) { ParKeepAliveClosure::do_oop_work(p); }
 701 
 702 // ParNewGeneration::
 703 KeepAliveClosure::KeepAliveClosure(ScanWeakRefClosure* cl) :
 704   DefNewGeneration::KeepAliveClosure(cl) {}
 705 
 706 template <class T>
 707 void /*ParNewGeneration::*/KeepAliveClosure::do_oop_work(T* p) {
 708 #ifdef ASSERT
 709   {
 710     assert(!oopDesc::is_null(*p), "expected non-null ref");
 711     oop obj = oopDesc::load_decode_heap_oop_not_null(p);
 712     // We never expect to see a null reference being processed
 713     // as a weak reference.
 714     assert(obj->is_oop(), "expected an oop while scanning weak refs");
 715   }
 716 #endif // ASSERT
 717 
 718   _cl->do_oop_nv(p);
 719 
 720   if (GenCollectedHeap::heap()->is_in_reserved(p)) {
 721     oop obj = oopDesc::load_decode_heap_oop_not_null(p);
 722     _rs->write_ref_field_gc_par(p, obj);
 723   }
 724 }
 725 
 726 void /*ParNewGeneration::*/KeepAliveClosure::do_oop(oop* p)       { KeepAliveClosure::do_oop_work(p); }
 727 void /*ParNewGeneration::*/KeepAliveClosure::do_oop(narrowOop* p) { KeepAliveClosure::do_oop_work(p); }
 728 
 729 template <class T> void ScanClosureWithParBarrier::do_oop_work(T* p) {
 730   T heap_oop = oopDesc::load_heap_oop(p);
 731   if (!oopDesc::is_null(heap_oop)) {
 732     oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
 733     if ((HeapWord*)obj < _boundary) {
 734       assert(!_g->to()->is_in_reserved(obj), "Scanning field twice?");




 667 
 668     const char* cname =
 669          PerfDataManager::counter_name(_gen_counters->name_space(), "threads");
 670     PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_None,
 671                                      ParallelGCThreads, CHECK);
 672   }
 673 }
 674 
 675 // ParNewGeneration::
 676 ParKeepAliveClosure::ParKeepAliveClosure(ParScanWeakRefClosure* cl) :
 677   DefNewGeneration::KeepAliveClosure(cl), _par_cl(cl) {}
 678 
 679 template <class T>
 680 void /*ParNewGeneration::*/ParKeepAliveClosure::do_oop_work(T* p) {
 681 #ifdef ASSERT
 682   {
 683     assert(!oopDesc::is_null(*p), "expected non-null ref");
 684     oop obj = oopDesc::load_decode_heap_oop_not_null(p);
 685     // We never expect to see a null reference being processed
 686     // as a weak reference.
 687     assert(oopDesc::is_oop(obj), "expected an oop while scanning weak refs");
 688   }
 689 #endif // ASSERT
 690 
 691   _par_cl->do_oop_nv(p);
 692 
 693   if (GenCollectedHeap::heap()->is_in_reserved(p)) {
 694     oop obj = oopDesc::load_decode_heap_oop_not_null(p);
 695     _rs->write_ref_field_gc_par(p, obj);
 696   }
 697 }
 698 
 699 void /*ParNewGeneration::*/ParKeepAliveClosure::do_oop(oop* p)       { ParKeepAliveClosure::do_oop_work(p); }
 700 void /*ParNewGeneration::*/ParKeepAliveClosure::do_oop(narrowOop* p) { ParKeepAliveClosure::do_oop_work(p); }
 701 
 702 // ParNewGeneration::
 703 KeepAliveClosure::KeepAliveClosure(ScanWeakRefClosure* cl) :
 704   DefNewGeneration::KeepAliveClosure(cl) {}
 705 
 706 template <class T>
 707 void /*ParNewGeneration::*/KeepAliveClosure::do_oop_work(T* p) {
 708 #ifdef ASSERT
 709   {
 710     assert(!oopDesc::is_null(*p), "expected non-null ref");
 711     oop obj = oopDesc::load_decode_heap_oop_not_null(p);
 712     // We never expect to see a null reference being processed
 713     // as a weak reference.
 714     assert(oopDesc::is_oop(obj), "expected an oop while scanning weak refs");
 715   }
 716 #endif // ASSERT
 717 
 718   _cl->do_oop_nv(p);
 719 
 720   if (GenCollectedHeap::heap()->is_in_reserved(p)) {
 721     oop obj = oopDesc::load_decode_heap_oop_not_null(p);
 722     _rs->write_ref_field_gc_par(p, obj);
 723   }
 724 }
 725 
 726 void /*ParNewGeneration::*/KeepAliveClosure::do_oop(oop* p)       { KeepAliveClosure::do_oop_work(p); }
 727 void /*ParNewGeneration::*/KeepAliveClosure::do_oop(narrowOop* p) { KeepAliveClosure::do_oop_work(p); }
 728 
 729 template <class T> void ScanClosureWithParBarrier::do_oop_work(T* p) {
 730   T heap_oop = oopDesc::load_heap_oop(p);
 731   if (!oopDesc::is_null(heap_oop)) {
 732     oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
 733     if ((HeapWord*)obj < _boundary) {
 734       assert(!_g->to()->is_in_reserved(obj), "Scanning field twice?");


< prev index next >