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(); |