785 bool PSParallelCompact::IsAliveClosure::do_object_b(oop p) { return mark_bitmap()->is_marked(p); } |
785 bool PSParallelCompact::IsAliveClosure::do_object_b(oop p) { return mark_bitmap()->is_marked(p); } |
786 |
786 |
787 void PSParallelCompact::KeepAliveClosure::do_oop(oop* p) { PSParallelCompact::KeepAliveClosure::do_oop_work(p); } |
787 void PSParallelCompact::KeepAliveClosure::do_oop(oop* p) { PSParallelCompact::KeepAliveClosure::do_oop_work(p); } |
788 void PSParallelCompact::KeepAliveClosure::do_oop(narrowOop* p) { PSParallelCompact::KeepAliveClosure::do_oop_work(p); } |
788 void PSParallelCompact::KeepAliveClosure::do_oop(narrowOop* p) { PSParallelCompact::KeepAliveClosure::do_oop_work(p); } |
789 |
789 |
790 PSParallelCompact::AdjustPointerClosure PSParallelCompact::_adjust_root_pointer_closure(true); |
790 PSParallelCompact::AdjustPointerClosure PSParallelCompact::_adjust_pointer_closure; |
791 PSParallelCompact::AdjustPointerClosure PSParallelCompact::_adjust_pointer_closure(false); |
|
792 PSParallelCompact::AdjustKlassClosure PSParallelCompact::_adjust_klass_closure; |
791 PSParallelCompact::AdjustKlassClosure PSParallelCompact::_adjust_klass_closure; |
793 |
792 |
794 void PSParallelCompact::AdjustPointerClosure::do_oop(oop* p) { adjust_pointer(p, _is_root); } |
793 void PSParallelCompact::AdjustPointerClosure::do_oop(oop* p) { adjust_pointer(p); } |
795 void PSParallelCompact::AdjustPointerClosure::do_oop(narrowOop* p) { adjust_pointer(p, _is_root); } |
794 void PSParallelCompact::AdjustPointerClosure::do_oop(narrowOop* p) { adjust_pointer(p); } |
796 |
795 |
797 void PSParallelCompact::FollowStackClosure::do_void() { _compaction_manager->follow_marking_stacks(); } |
796 void PSParallelCompact::FollowStackClosure::do_void() { _compaction_manager->follow_marking_stacks(); } |
798 |
797 |
799 void PSParallelCompact::MarkAndPushClosure::do_oop(oop* p) { |
798 void PSParallelCompact::MarkAndPushClosure::do_oop(oop* p) { |
800 mark_and_push(_compaction_manager, p); |
799 mark_and_push(_compaction_manager, p); |
803 |
802 |
804 void PSParallelCompact::FollowKlassClosure::do_klass(Klass* klass) { |
803 void PSParallelCompact::FollowKlassClosure::do_klass(Klass* klass) { |
805 klass->oops_do(_mark_and_push_closure); |
804 klass->oops_do(_mark_and_push_closure); |
806 } |
805 } |
807 void PSParallelCompact::AdjustKlassClosure::do_klass(Klass* klass) { |
806 void PSParallelCompact::AdjustKlassClosure::do_klass(Klass* klass) { |
808 klass->oops_do(&PSParallelCompact::_adjust_root_pointer_closure); |
807 klass->oops_do(&PSParallelCompact::_adjust_pointer_closure); |
809 } |
808 } |
810 |
809 |
811 void PSParallelCompact::post_initialize() { |
810 void PSParallelCompact::post_initialize() { |
812 ParallelScavengeHeap* heap = gc_heap(); |
811 ParallelScavengeHeap* heap = gc_heap(); |
813 assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); |
812 assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); |
2396 cld->oops_do(&mark_and_push_closure, &follow_klass_closure, true); |
2395 cld->oops_do(&mark_and_push_closure, &follow_klass_closure, true); |
2397 } |
2396 } |
2398 |
2397 |
2399 void PSParallelCompact::adjust_class_loader(ParCompactionManager* cm, |
2398 void PSParallelCompact::adjust_class_loader(ParCompactionManager* cm, |
2400 ClassLoaderData* cld) { |
2399 ClassLoaderData* cld) { |
2401 cld->oops_do(PSParallelCompact::adjust_root_pointer_closure(), |
2400 cld->oops_do(PSParallelCompact::adjust_pointer_closure(), |
2402 PSParallelCompact::adjust_klass_closure(), |
2401 PSParallelCompact::adjust_klass_closure(), |
2403 true); |
2402 true); |
2404 } |
2403 } |
2405 |
2404 |
2406 // This should be moved to the shared markSweep code! |
2405 // This should be moved to the shared markSweep code! |
2417 |
2416 |
2418 // Need new claim bits when tracing through and adjusting pointers. |
2417 // Need new claim bits when tracing through and adjusting pointers. |
2419 ClassLoaderDataGraph::clear_claimed_marks(); |
2418 ClassLoaderDataGraph::clear_claimed_marks(); |
2420 |
2419 |
2421 // General strong roots. |
2420 // General strong roots. |
2422 Universe::oops_do(adjust_root_pointer_closure()); |
2421 Universe::oops_do(adjust_pointer_closure()); |
2423 JNIHandles::oops_do(adjust_root_pointer_closure()); // Global (strong) JNI handles |
2422 JNIHandles::oops_do(adjust_pointer_closure()); // Global (strong) JNI handles |
2424 CLDToOopClosure adjust_from_cld(adjust_root_pointer_closure()); |
2423 CLDToOopClosure adjust_from_cld(adjust_pointer_closure()); |
2425 Threads::oops_do(adjust_root_pointer_closure(), &adjust_from_cld, NULL); |
2424 Threads::oops_do(adjust_pointer_closure(), &adjust_from_cld, NULL); |
2426 ObjectSynchronizer::oops_do(adjust_root_pointer_closure()); |
2425 ObjectSynchronizer::oops_do(adjust_pointer_closure()); |
2427 FlatProfiler::oops_do(adjust_root_pointer_closure()); |
2426 FlatProfiler::oops_do(adjust_pointer_closure()); |
2428 Management::oops_do(adjust_root_pointer_closure()); |
2427 Management::oops_do(adjust_pointer_closure()); |
2429 JvmtiExport::oops_do(adjust_root_pointer_closure()); |
2428 JvmtiExport::oops_do(adjust_pointer_closure()); |
2430 // SO_AllClasses |
2429 // SO_AllClasses |
2431 SystemDictionary::oops_do(adjust_root_pointer_closure()); |
2430 SystemDictionary::oops_do(adjust_pointer_closure()); |
2432 ClassLoaderDataGraph::oops_do(adjust_root_pointer_closure(), adjust_klass_closure(), true); |
2431 ClassLoaderDataGraph::oops_do(adjust_pointer_closure(), adjust_klass_closure(), true); |
2433 |
2432 |
2434 // Now adjust pointers in remaining weak roots. (All of which should |
2433 // Now adjust pointers in remaining weak roots. (All of which should |
2435 // have been cleared if they pointed to non-surviving objects.) |
2434 // have been cleared if they pointed to non-surviving objects.) |
2436 // Global (weak) JNI handles |
2435 // Global (weak) JNI handles |
2437 JNIHandles::weak_oops_do(&always_true, adjust_root_pointer_closure()); |
2436 JNIHandles::weak_oops_do(&always_true, adjust_pointer_closure()); |
2438 |
2437 |
2439 CodeCache::oops_do(adjust_pointer_closure()); |
2438 CodeCache::oops_do(adjust_pointer_closure()); |
2440 StringTable::oops_do(adjust_root_pointer_closure()); |
2439 StringTable::oops_do(adjust_pointer_closure()); |
2441 ref_processor()->weak_oops_do(adjust_root_pointer_closure()); |
2440 ref_processor()->weak_oops_do(adjust_pointer_closure()); |
2442 // Roots were visited so references into the young gen in roots |
2441 // Roots were visited so references into the young gen in roots |
2443 // may have been scanned. Process them also. |
2442 // may have been scanned. Process them also. |
2444 // Should the reference processor have a span that excludes |
2443 // Should the reference processor have a span that excludes |
2445 // young gen objects? |
2444 // young gen objects? |
2446 PSScavenge::reference_processor()->weak_oops_do( |
2445 PSScavenge::reference_processor()->weak_oops_do(adjust_pointer_closure()); |
2447 adjust_root_pointer_closure()); |
|
2448 } |
2446 } |
2449 |
2447 |
2450 void PSParallelCompact::enqueue_region_draining_tasks(GCTaskQueue* q, |
2448 void PSParallelCompact::enqueue_region_draining_tasks(GCTaskQueue* q, |
2451 uint parallel_gc_threads) |
2449 uint parallel_gc_threads) |
2452 { |
2450 { |