src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp

Print this page
rev 2691 : [mq]: g1-reference-processing

*** 2002,2012 **** ReferenceProcessorAtomicMutator rp_mut_atomic(ref_processor(), true); // Temporarily make reference _discovery_ single threaded (non-MT) ReferenceProcessorMTDiscoveryMutator rp_mut_discovery(ref_processor(), false); ref_processor()->set_enqueuing_is_done(false); ! ref_processor()->enable_discovery(); ref_processor()->setup_policy(clear_all_soft_refs); // If an asynchronous collection finishes, the _modUnionTable is // all clear. If we are assuming the collection from an asynchronous // collection, clear the _modUnionTable. assert(_collectorState != Idling || _modUnionTable.isAllClear(), --- 2002,2012 ---- ReferenceProcessorAtomicMutator rp_mut_atomic(ref_processor(), true); // Temporarily make reference _discovery_ single threaded (non-MT) ReferenceProcessorMTDiscoveryMutator rp_mut_discovery(ref_processor(), false); ref_processor()->set_enqueuing_is_done(false); ! ref_processor()->enable_discovery(false /*verify_disabled*/, false /*check_no_refs*/); ref_processor()->setup_policy(clear_all_soft_refs); // If an asynchronous collection finishes, the _modUnionTable is // all clear. If we are assuming the collection from an asynchronous // collection, clear the _modUnionTable. assert(_collectorState != Idling || _modUnionTable.isAllClear(),
*** 3488,3499 **** if (asynch) { // acquire locks for subsequent manipulations MutexLockerEx x(bitMapLock(), Mutex::_no_safepoint_check_flag); checkpointRootsInitialWork(asynch); ! rp->verify_no_references_recorded(); ! rp->enable_discovery(); // enable ("weak") refs discovery _collectorState = Marking; } else { // (Weak) Refs discovery: this is controlled from genCollectedHeap::do_collection // which recognizes if we are a CMS generation, and doesn't try to turn on // discovery; verify that they aren't meddling. --- 3488,3499 ---- if (asynch) { // acquire locks for subsequent manipulations MutexLockerEx x(bitMapLock(), Mutex::_no_safepoint_check_flag); checkpointRootsInitialWork(asynch); ! // enable ("weak") refs discovery ! rp->enable_discovery(true /*verify_disabled*/, true /*check_no_refs*/); _collectorState = Marking; } else { // (Weak) Refs discovery: this is controlled from genCollectedHeap::do_collection // which recognizes if we are a CMS generation, and doesn't try to turn on // discovery; verify that they aren't meddling.
*** 3501,3511 **** "incorrect setting of discovery predicate"); assert(!rp->discovery_enabled(), "genCollectedHeap shouldn't control " "ref discovery for this generation kind"); // already have locks checkpointRootsInitialWork(asynch); ! rp->enable_discovery(); // now enable ("weak") refs discovery _collectorState = Marking; } SpecializationStats::print(); } --- 3501,3512 ---- "incorrect setting of discovery predicate"); assert(!rp->discovery_enabled(), "genCollectedHeap shouldn't control " "ref discovery for this generation kind"); // already have locks checkpointRootsInitialWork(asynch); ! // now enable ("weak") refs discovery ! rp->enable_discovery(true /*verify_disabled*/, false /*verify_no_refs*/); _collectorState = Marking; } SpecializationStats::print(); }