593 PSOldGen* old_gen = heap->old_gen();
594
595 // Need to clear claim bits before the tracing starts.
596 ClassLoaderDataGraph::clear_claimed_marks();
597
598 // General strong roots.
599 Universe::oops_do(adjust_pointer_closure());
600 JNIHandles::oops_do(adjust_pointer_closure()); // Global (strong) JNI handles
601 Threads::oops_do(adjust_pointer_closure(), NULL);
602 ObjectSynchronizer::oops_do(adjust_pointer_closure());
603 FlatProfiler::oops_do(adjust_pointer_closure());
604 Management::oops_do(adjust_pointer_closure());
605 JvmtiExport::oops_do(adjust_pointer_closure());
606 SystemDictionary::oops_do(adjust_pointer_closure());
607 ClassLoaderDataGraph::cld_do(adjust_cld_closure());
608
609 // Now adjust pointers in remaining weak roots. (All of which should
610 // have been cleared if they pointed to non-surviving objects.)
611 // Global (weak) JNI handles
612 JNIHandles::weak_oops_do(adjust_pointer_closure());
613
614 CodeBlobToOopClosure adjust_from_blobs(adjust_pointer_closure(), CodeBlobToOopClosure::FixRelocations);
615 CodeCache::blobs_do(&adjust_from_blobs);
616 AOTLoader::oops_do(adjust_pointer_closure());
617 StringTable::oops_do(adjust_pointer_closure());
618 ref_processor()->weak_oops_do(adjust_pointer_closure());
619 PSScavenge::reference_processor()->weak_oops_do(adjust_pointer_closure());
620
621 adjust_marks();
622
623 young_gen->adjust_pointers();
624 old_gen->adjust_pointers();
625 }
626
627 void PSMarkSweep::mark_sweep_phase4() {
628 EventMark m("4 compact heap");
629 GCTraceTime(Info, gc, phases) tm("Phase 4: Move objects", _gc_timer);
630
631 // All pointers are now adjusted, move objects accordingly
632
|
593 PSOldGen* old_gen = heap->old_gen();
594
595 // Need to clear claim bits before the tracing starts.
596 ClassLoaderDataGraph::clear_claimed_marks();
597
598 // General strong roots.
599 Universe::oops_do(adjust_pointer_closure());
600 JNIHandles::oops_do(adjust_pointer_closure()); // Global (strong) JNI handles
601 Threads::oops_do(adjust_pointer_closure(), NULL);
602 ObjectSynchronizer::oops_do(adjust_pointer_closure());
603 FlatProfiler::oops_do(adjust_pointer_closure());
604 Management::oops_do(adjust_pointer_closure());
605 JvmtiExport::oops_do(adjust_pointer_closure());
606 SystemDictionary::oops_do(adjust_pointer_closure());
607 ClassLoaderDataGraph::cld_do(adjust_cld_closure());
608
609 // Now adjust pointers in remaining weak roots. (All of which should
610 // have been cleared if they pointed to non-surviving objects.)
611 // Global (weak) JNI handles
612 JNIHandles::weak_oops_do(adjust_pointer_closure());
613 HeapMonitoring::do_weak_oops(adjust_pointer_closure());
614
615 CodeBlobToOopClosure adjust_from_blobs(adjust_pointer_closure(), CodeBlobToOopClosure::FixRelocations);
616 CodeCache::blobs_do(&adjust_from_blobs);
617 AOTLoader::oops_do(adjust_pointer_closure());
618 StringTable::oops_do(adjust_pointer_closure());
619 ref_processor()->weak_oops_do(adjust_pointer_closure());
620 PSScavenge::reference_processor()->weak_oops_do(adjust_pointer_closure());
621
622 adjust_marks();
623
624 young_gen->adjust_pointers();
625 old_gen->adjust_pointers();
626 }
627
628 void PSMarkSweep::mark_sweep_phase4() {
629 EventMark m("4 compact heap");
630 GCTraceTime(Info, gc, phases) tm("Phase 4: Move objects", _gc_timer);
631
632 // All pointers are now adjusted, move objects accordingly
633
|