< prev index next >

src/hotspot/share/gc/parallel/psMarkSweep.cpp

Print this page




 506 void PSMarkSweep::mark_sweep_phase1(bool clear_all_softrefs) {
 507   // Recursively traverse all live objects and mark them
 508   GCTraceTime(Info, gc, phases) tm("Phase 1: Mark live objects", _gc_timer);
 509 
 510   ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
 511 
 512   // Need to clear claim bits before the tracing starts.
 513   ClassLoaderDataGraph::clear_claimed_marks();
 514 
 515   // General strong roots.
 516   {
 517     ParallelScavengeHeap::ParStrongRootsScope psrs;
 518     Universe::oops_do(mark_and_push_closure());
 519     JNIHandles::oops_do(mark_and_push_closure());   // Global (strong) JNI handles
 520     MarkingCodeBlobClosure each_active_code_blob(mark_and_push_closure(), !CodeBlobToOopClosure::FixRelocations);
 521     Threads::oops_do(mark_and_push_closure(), &each_active_code_blob);
 522     ObjectSynchronizer::oops_do(mark_and_push_closure());
 523     Management::oops_do(mark_and_push_closure());
 524     JvmtiExport::oops_do(mark_and_push_closure());
 525     SystemDictionary::oops_do(mark_and_push_closure());
 526     ClassLoaderDataGraph::always_strong_cld_oops_do(follow_cld_closure());
 527     // Do not treat nmethods as strong roots for mark/sweep, since we can unload them.
 528     //CodeCache::scavenge_root_nmethods_do(CodeBlobToOopClosure(mark_and_push_closure()));
 529     AOTLoader::oops_do(mark_and_push_closure());
 530   }
 531 
 532   // Flush marking stack.
 533   follow_stack();
 534 
 535   // Process reference objects found during marking
 536   {
 537     GCTraceTime(Debug, gc, phases) t("Reference Processing", _gc_timer);
 538 
 539     ref_processor()->setup_policy(clear_all_softrefs);
 540     ReferenceProcessorPhaseTimes pt(_gc_timer, ref_processor()->max_num_queues());
 541     const ReferenceProcessorStats& stats =
 542       ref_processor()->process_discovered_references(
 543         is_alive_closure(), mark_and_push_closure(), follow_stack_closure(), NULL, &pt);
 544     gc_tracer()->report_gc_reference_stats(stats);
 545     pt.print_all_references();
 546   }


 603 
 604 void PSMarkSweep::mark_sweep_phase3() {
 605   // Adjust the pointers to reflect the new locations
 606   GCTraceTime(Info, gc, phases) tm("Phase 3: Adjust pointers", _gc_timer);
 607 
 608   ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
 609   PSYoungGen* young_gen = heap->young_gen();
 610   PSOldGen* old_gen = heap->old_gen();
 611 
 612   // Need to clear claim bits before the tracing starts.
 613   ClassLoaderDataGraph::clear_claimed_marks();
 614 
 615   // General strong roots.
 616   Universe::oops_do(adjust_pointer_closure());
 617   JNIHandles::oops_do(adjust_pointer_closure());   // Global (strong) JNI handles
 618   Threads::oops_do(adjust_pointer_closure(), NULL);
 619   ObjectSynchronizer::oops_do(adjust_pointer_closure());
 620   Management::oops_do(adjust_pointer_closure());
 621   JvmtiExport::oops_do(adjust_pointer_closure());
 622   SystemDictionary::oops_do(adjust_pointer_closure());
 623   ClassLoaderDataGraph::cld_oops_do(adjust_cld_closure());
 624 
 625   // Now adjust pointers in remaining weak roots.  (All of which should
 626   // have been cleared if they pointed to non-surviving objects.)
 627   // Global (weak) JNI handles
 628   WeakProcessor::oops_do(adjust_pointer_closure());
 629 
 630   CodeBlobToOopClosure adjust_from_blobs(adjust_pointer_closure(), CodeBlobToOopClosure::FixRelocations);
 631   CodeCache::blobs_do(&adjust_from_blobs);
 632   AOTLoader::oops_do(adjust_pointer_closure());
 633   StringTable::oops_do(adjust_pointer_closure());
 634   ref_processor()->weak_oops_do(adjust_pointer_closure());
 635   PSScavenge::reference_processor()->weak_oops_do(adjust_pointer_closure());
 636 
 637   adjust_marks();
 638 
 639   young_gen->adjust_pointers();
 640   old_gen->adjust_pointers();
 641 }
 642 
 643 void PSMarkSweep::mark_sweep_phase4() {




 506 void PSMarkSweep::mark_sweep_phase1(bool clear_all_softrefs) {
 507   // Recursively traverse all live objects and mark them
 508   GCTraceTime(Info, gc, phases) tm("Phase 1: Mark live objects", _gc_timer);
 509 
 510   ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
 511 
 512   // Need to clear claim bits before the tracing starts.
 513   ClassLoaderDataGraph::clear_claimed_marks();
 514 
 515   // General strong roots.
 516   {
 517     ParallelScavengeHeap::ParStrongRootsScope psrs;
 518     Universe::oops_do(mark_and_push_closure());
 519     JNIHandles::oops_do(mark_and_push_closure());   // Global (strong) JNI handles
 520     MarkingCodeBlobClosure each_active_code_blob(mark_and_push_closure(), !CodeBlobToOopClosure::FixRelocations);
 521     Threads::oops_do(mark_and_push_closure(), &each_active_code_blob);
 522     ObjectSynchronizer::oops_do(mark_and_push_closure());
 523     Management::oops_do(mark_and_push_closure());
 524     JvmtiExport::oops_do(mark_and_push_closure());
 525     SystemDictionary::oops_do(mark_and_push_closure());
 526     ClassLoaderDataGraph::always_strong_cld_do(follow_cld_closure());
 527     // Do not treat nmethods as strong roots for mark/sweep, since we can unload them.
 528     //CodeCache::scavenge_root_nmethods_do(CodeBlobToOopClosure(mark_and_push_closure()));
 529     AOTLoader::oops_do(mark_and_push_closure());
 530   }
 531 
 532   // Flush marking stack.
 533   follow_stack();
 534 
 535   // Process reference objects found during marking
 536   {
 537     GCTraceTime(Debug, gc, phases) t("Reference Processing", _gc_timer);
 538 
 539     ref_processor()->setup_policy(clear_all_softrefs);
 540     ReferenceProcessorPhaseTimes pt(_gc_timer, ref_processor()->max_num_queues());
 541     const ReferenceProcessorStats& stats =
 542       ref_processor()->process_discovered_references(
 543         is_alive_closure(), mark_and_push_closure(), follow_stack_closure(), NULL, &pt);
 544     gc_tracer()->report_gc_reference_stats(stats);
 545     pt.print_all_references();
 546   }


 603 
 604 void PSMarkSweep::mark_sweep_phase3() {
 605   // Adjust the pointers to reflect the new locations
 606   GCTraceTime(Info, gc, phases) tm("Phase 3: Adjust pointers", _gc_timer);
 607 
 608   ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
 609   PSYoungGen* young_gen = heap->young_gen();
 610   PSOldGen* old_gen = heap->old_gen();
 611 
 612   // Need to clear claim bits before the tracing starts.
 613   ClassLoaderDataGraph::clear_claimed_marks();
 614 
 615   // General strong roots.
 616   Universe::oops_do(adjust_pointer_closure());
 617   JNIHandles::oops_do(adjust_pointer_closure());   // Global (strong) JNI handles
 618   Threads::oops_do(adjust_pointer_closure(), NULL);
 619   ObjectSynchronizer::oops_do(adjust_pointer_closure());
 620   Management::oops_do(adjust_pointer_closure());
 621   JvmtiExport::oops_do(adjust_pointer_closure());
 622   SystemDictionary::oops_do(adjust_pointer_closure());
 623   ClassLoaderDataGraph::cld_do(adjust_cld_closure());
 624 
 625   // Now adjust pointers in remaining weak roots.  (All of which should
 626   // have been cleared if they pointed to non-surviving objects.)
 627   // Global (weak) JNI handles
 628   WeakProcessor::oops_do(adjust_pointer_closure());
 629 
 630   CodeBlobToOopClosure adjust_from_blobs(adjust_pointer_closure(), CodeBlobToOopClosure::FixRelocations);
 631   CodeCache::blobs_do(&adjust_from_blobs);
 632   AOTLoader::oops_do(adjust_pointer_closure());
 633   StringTable::oops_do(adjust_pointer_closure());
 634   ref_processor()->weak_oops_do(adjust_pointer_closure());
 635   PSScavenge::reference_processor()->weak_oops_do(adjust_pointer_closure());
 636 
 637   adjust_marks();
 638 
 639   young_gen->adjust_pointers();
 640   old_gen->adjust_pointers();
 641 }
 642 
 643 void PSMarkSweep::mark_sweep_phase4() {


< prev index next >