< prev index next >

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

Print this page




 553 
 554 void PSMarkSweep::mark_sweep_phase2() {
 555   GCTraceTime(Trace, gc) tm("Phase 2: Compute new object addresses", _gc_timer);
 556 
 557   // Now all live objects are marked, compute the new object addresses.
 558 
 559   // It is not required that we traverse spaces in the same order in
 560   // phase2, phase3 and phase4, but the ValidateMarkSweep live oops
 561   // tracking expects us to do so. See comment under phase4.
 562 
 563   ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
 564   PSOldGen* old_gen = heap->old_gen();
 565 
 566   // Begin compacting into the old gen
 567   PSMarkSweepDecorator::set_destination_decorator_tenured();
 568 
 569   // This will also compact the young gen spaces.
 570   old_gen->precompact();
 571 }
 572 
 573 // This should be moved to the shared markSweep code!
 574 class PSAlwaysTrueClosure: public BoolObjectClosure {
 575 public:
 576   bool do_object_b(oop p) { return true; }
 577 };
 578 static PSAlwaysTrueClosure always_true;
 579 
 580 void PSMarkSweep::mark_sweep_phase3() {
 581   // Adjust the pointers to reflect the new locations
 582   GCTraceTime(Trace, gc) tm("Phase 3: Adjust pointers", _gc_timer);
 583 
 584   ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
 585   PSYoungGen* young_gen = heap->young_gen();
 586   PSOldGen* old_gen = heap->old_gen();
 587 
 588   // Need to clear claim bits before the tracing starts.
 589   ClassLoaderDataGraph::clear_claimed_marks();
 590 
 591   // General strong roots.
 592   Universe::oops_do(adjust_pointer_closure());
 593   JNIHandles::oops_do(adjust_pointer_closure());   // Global (strong) JNI handles
 594   CLDToOopClosure adjust_from_cld(adjust_pointer_closure());
 595   Threads::oops_do(adjust_pointer_closure(), &adjust_from_cld, NULL);
 596   ObjectSynchronizer::oops_do(adjust_pointer_closure());
 597   FlatProfiler::oops_do(adjust_pointer_closure());
 598   Management::oops_do(adjust_pointer_closure());
 599   JvmtiExport::oops_do(adjust_pointer_closure());
 600   SystemDictionary::oops_do(adjust_pointer_closure());
 601   ClassLoaderDataGraph::cld_do(adjust_cld_closure());
 602 
 603   // Now adjust pointers in remaining weak roots.  (All of which should
 604   // have been cleared if they pointed to non-surviving objects.)
 605   // Global (weak) JNI handles
 606   JNIHandles::weak_oops_do(&always_true, adjust_pointer_closure());
 607 
 608   CodeBlobToOopClosure adjust_from_blobs(adjust_pointer_closure(), CodeBlobToOopClosure::FixRelocations);
 609   CodeCache::blobs_do(&adjust_from_blobs);
 610   StringTable::oops_do(adjust_pointer_closure());
 611   ref_processor()->weak_oops_do(adjust_pointer_closure());
 612   PSScavenge::reference_processor()->weak_oops_do(adjust_pointer_closure());
 613 
 614   adjust_marks();
 615 
 616   young_gen->adjust_pointers();
 617   old_gen->adjust_pointers();
 618 }
 619 
 620 void PSMarkSweep::mark_sweep_phase4() {
 621   EventMark m("4 compact heap");
 622   GCTraceTime(Trace, gc) tm("Phase 4: Move objects", _gc_timer);
 623 
 624   // All pointers are now adjusted, move objects accordingly
 625 
 626   ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();




 553 
 554 void PSMarkSweep::mark_sweep_phase2() {
 555   GCTraceTime(Trace, gc) tm("Phase 2: Compute new object addresses", _gc_timer);
 556 
 557   // Now all live objects are marked, compute the new object addresses.
 558 
 559   // It is not required that we traverse spaces in the same order in
 560   // phase2, phase3 and phase4, but the ValidateMarkSweep live oops
 561   // tracking expects us to do so. See comment under phase4.
 562 
 563   ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
 564   PSOldGen* old_gen = heap->old_gen();
 565 
 566   // Begin compacting into the old gen
 567   PSMarkSweepDecorator::set_destination_decorator_tenured();
 568 
 569   // This will also compact the young gen spaces.
 570   old_gen->precompact();
 571 }
 572 







 573 void PSMarkSweep::mark_sweep_phase3() {
 574   // Adjust the pointers to reflect the new locations
 575   GCTraceTime(Trace, gc) tm("Phase 3: Adjust pointers", _gc_timer);
 576 
 577   ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
 578   PSYoungGen* young_gen = heap->young_gen();
 579   PSOldGen* old_gen = heap->old_gen();
 580 
 581   // Need to clear claim bits before the tracing starts.
 582   ClassLoaderDataGraph::clear_claimed_marks();
 583 
 584   // General strong roots.
 585   Universe::oops_do(adjust_pointer_closure());
 586   JNIHandles::oops_do(adjust_pointer_closure());   // Global (strong) JNI handles
 587   CLDToOopClosure adjust_from_cld(adjust_pointer_closure());
 588   Threads::oops_do(adjust_pointer_closure(), &adjust_from_cld, NULL);
 589   ObjectSynchronizer::oops_do(adjust_pointer_closure());
 590   FlatProfiler::oops_do(adjust_pointer_closure());
 591   Management::oops_do(adjust_pointer_closure());
 592   JvmtiExport::oops_do(adjust_pointer_closure());
 593   SystemDictionary::oops_do(adjust_pointer_closure());
 594   ClassLoaderDataGraph::cld_do(adjust_cld_closure());
 595 
 596   // Now adjust pointers in remaining weak roots.  (All of which should
 597   // have been cleared if they pointed to non-surviving objects.)
 598   // Global (weak) JNI handles
 599   JNIHandles::weak_oops_do(adjust_pointer_closure());
 600 
 601   CodeBlobToOopClosure adjust_from_blobs(adjust_pointer_closure(), CodeBlobToOopClosure::FixRelocations);
 602   CodeCache::blobs_do(&adjust_from_blobs);
 603   StringTable::oops_do(adjust_pointer_closure());
 604   ref_processor()->weak_oops_do(adjust_pointer_closure());
 605   PSScavenge::reference_processor()->weak_oops_do(adjust_pointer_closure());
 606 
 607   adjust_marks();
 608 
 609   young_gen->adjust_pointers();
 610   old_gen->adjust_pointers();
 611 }
 612 
 613 void PSMarkSweep::mark_sweep_phase4() {
 614   EventMark m("4 compact heap");
 615   GCTraceTime(Trace, gc) tm("Phase 4: Move objects", _gc_timer);
 616 
 617   // All pointers are now adjusted, move objects accordingly
 618 
 619   ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();


< prev index next >