hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp
changeset 25492 d27050bdfb04
parent 25491 70fb742e40aa
child 25714 87fa6860b5ae
equal deleted inserted replaced
25491:70fb742e40aa 25492:d27050bdfb04
   534   {
   534   {
   535     ParallelScavengeHeap::ParStrongRootsScope psrs;
   535     ParallelScavengeHeap::ParStrongRootsScope psrs;
   536     Universe::oops_do(mark_and_push_closure());
   536     Universe::oops_do(mark_and_push_closure());
   537     JNIHandles::oops_do(mark_and_push_closure());   // Global (strong) JNI handles
   537     JNIHandles::oops_do(mark_and_push_closure());   // Global (strong) JNI handles
   538     CLDToOopClosure mark_and_push_from_cld(mark_and_push_closure());
   538     CLDToOopClosure mark_and_push_from_cld(mark_and_push_closure());
   539     CodeBlobToOopClosure each_active_code_blob(mark_and_push_closure(), /*do_marking=*/ true);
   539     MarkingCodeBlobClosure each_active_code_blob(mark_and_push_closure(), !CodeBlobToOopClosure::FixRelocations);
   540     Threads::oops_do(mark_and_push_closure(), &mark_and_push_from_cld, &each_active_code_blob);
   540     Threads::oops_do(mark_and_push_closure(), &mark_and_push_from_cld, &each_active_code_blob);
   541     ObjectSynchronizer::oops_do(mark_and_push_closure());
   541     ObjectSynchronizer::oops_do(mark_and_push_closure());
   542     FlatProfiler::oops_do(mark_and_push_closure());
   542     FlatProfiler::oops_do(mark_and_push_closure());
   543     Management::oops_do(mark_and_push_closure());
   543     Management::oops_do(mark_and_push_closure());
   544     JvmtiExport::oops_do(mark_and_push_closure());
   544     JvmtiExport::oops_do(mark_and_push_closure());
   545     SystemDictionary::always_strong_oops_do(mark_and_push_closure());
   545     SystemDictionary::always_strong_oops_do(mark_and_push_closure());
   546     ClassLoaderDataGraph::always_strong_oops_do(mark_and_push_closure(), follow_klass_closure(), true);
   546     ClassLoaderDataGraph::always_strong_cld_do(follow_cld_closure());
   547     // Do not treat nmethods as strong roots for mark/sweep, since we can unload them.
   547     // Do not treat nmethods as strong roots for mark/sweep, since we can unload them.
   548     //CodeCache::scavenge_root_nmethods_do(CodeBlobToOopClosure(mark_and_push_closure()));
   548     //CodeCache::scavenge_root_nmethods_do(CodeBlobToOopClosure(mark_and_push_closure()));
   549   }
   549   }
   550 
   550 
   551   // Flush marking stack.
   551   // Flush marking stack.
   631   Threads::oops_do(adjust_pointer_closure(), &adjust_from_cld, NULL);
   631   Threads::oops_do(adjust_pointer_closure(), &adjust_from_cld, NULL);
   632   ObjectSynchronizer::oops_do(adjust_pointer_closure());
   632   ObjectSynchronizer::oops_do(adjust_pointer_closure());
   633   FlatProfiler::oops_do(adjust_pointer_closure());
   633   FlatProfiler::oops_do(adjust_pointer_closure());
   634   Management::oops_do(adjust_pointer_closure());
   634   Management::oops_do(adjust_pointer_closure());
   635   JvmtiExport::oops_do(adjust_pointer_closure());
   635   JvmtiExport::oops_do(adjust_pointer_closure());
   636   // SO_AllClasses
       
   637   SystemDictionary::oops_do(adjust_pointer_closure());
   636   SystemDictionary::oops_do(adjust_pointer_closure());
   638   ClassLoaderDataGraph::oops_do(adjust_pointer_closure(), adjust_klass_closure(), true);
   637   ClassLoaderDataGraph::cld_do(adjust_cld_closure());
   639 
   638 
   640   // Now adjust pointers in remaining weak roots.  (All of which should
   639   // Now adjust pointers in remaining weak roots.  (All of which should
   641   // have been cleared if they pointed to non-surviving objects.)
   640   // have been cleared if they pointed to non-surviving objects.)
   642   // Global (weak) JNI handles
   641   // Global (weak) JNI handles
   643   JNIHandles::weak_oops_do(&always_true, adjust_pointer_closure());
   642   JNIHandles::weak_oops_do(&always_true, adjust_pointer_closure());
   644 
   643 
   645   CodeCache::oops_do(adjust_pointer_closure());
   644   CodeBlobToOopClosure adjust_from_blobs(adjust_pointer_closure(), CodeBlobToOopClosure::FixRelocations);
       
   645   CodeCache::blobs_do(&adjust_from_blobs);
   646   StringTable::oops_do(adjust_pointer_closure());
   646   StringTable::oops_do(adjust_pointer_closure());
   647   ref_processor()->weak_oops_do(adjust_pointer_closure());
   647   ref_processor()->weak_oops_do(adjust_pointer_closure());
   648   PSScavenge::reference_processor()->weak_oops_do(adjust_pointer_closure());
   648   PSScavenge::reference_processor()->weak_oops_do(adjust_pointer_closure());
   649 
   649 
   650   adjust_marks();
   650   adjust_marks();