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?"); |