src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp

Print this page
rev 4616 : 8014277: Remove ObjectClosure as base class for BoolObjectClosure


 764 }
 765 #endif  // #ifdef ASSERT
 766 
 767 #ifdef NOT_PRODUCT
 768 ParallelCompactData::RegionData* debug_region(size_t region_index) {
 769   ParallelCompactData& sd = PSParallelCompact::summary_data();
 770   return sd.region(region_index);
 771 }
 772 #endif
 773 
 774 elapsedTimer        PSParallelCompact::_accumulated_time;
 775 unsigned int        PSParallelCompact::_total_invocations = 0;
 776 unsigned int        PSParallelCompact::_maximum_compaction_gc_num = 0;
 777 jlong               PSParallelCompact::_time_of_last_gc = 0;
 778 CollectorCounters*  PSParallelCompact::_counters = NULL;
 779 ParMarkBitMap       PSParallelCompact::_mark_bitmap;
 780 ParallelCompactData PSParallelCompact::_summary_data;
 781 
 782 PSParallelCompact::IsAliveClosure PSParallelCompact::_is_alive_closure;
 783 
 784 void PSParallelCompact::IsAliveClosure::do_object(oop p)   { ShouldNotReachHere(); }
 785 bool PSParallelCompact::IsAliveClosure::do_object_b(oop p) { return mark_bitmap()->is_marked(p); }
 786 
 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); }
 789 
 790 PSParallelCompact::AdjustPointerClosure PSParallelCompact::_adjust_pointer_closure;
 791 PSParallelCompact::AdjustKlassClosure PSParallelCompact::_adjust_klass_closure;
 792 
 793 void PSParallelCompact::AdjustPointerClosure::do_oop(oop* p)       { adjust_pointer(p); }
 794 void PSParallelCompact::AdjustPointerClosure::do_oop(narrowOop* p) { adjust_pointer(p); }
 795 
 796 void PSParallelCompact::FollowStackClosure::do_void() { _compaction_manager->follow_marking_stacks(); }
 797 
 798 void PSParallelCompact::MarkAndPushClosure::do_oop(oop* p)       {
 799   mark_and_push(_compaction_manager, p);
 800 }
 801 void PSParallelCompact::MarkAndPushClosure::do_oop(narrowOop* p) { mark_and_push(_compaction_manager, p); }
 802 
 803 void PSParallelCompact::FollowKlassClosure::do_klass(Klass* klass) {
 804   klass->oops_do(_mark_and_push_closure);


2389 }
2390 
2391 void PSParallelCompact::follow_class_loader(ParCompactionManager* cm,
2392                                             ClassLoaderData* cld) {
2393   PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm);
2394   PSParallelCompact::FollowKlassClosure follow_klass_closure(&mark_and_push_closure);
2395 
2396   cld->oops_do(&mark_and_push_closure, &follow_klass_closure, true);
2397 }
2398 
2399 void PSParallelCompact::adjust_class_loader(ParCompactionManager* cm,
2400                                             ClassLoaderData* cld) {
2401   cld->oops_do(PSParallelCompact::adjust_pointer_closure(),
2402                PSParallelCompact::adjust_klass_closure(),
2403                true);
2404 }
2405 
2406 // This should be moved to the shared markSweep code!
2407 class PSAlwaysTrueClosure: public BoolObjectClosure {
2408 public:
2409   void do_object(oop p) { ShouldNotReachHere(); }
2410   bool do_object_b(oop p) { return true; }
2411 };
2412 static PSAlwaysTrueClosure always_true;
2413 
2414 void PSParallelCompact::adjust_roots() {
2415   // Adjust the pointers to reflect the new locations
2416   TraceTime tm("adjust roots", print_phases(), true, gclog_or_tty);
2417 
2418   // Need new claim bits when tracing through and adjusting pointers.
2419   ClassLoaderDataGraph::clear_claimed_marks();
2420 
2421   // General strong roots.
2422   Universe::oops_do(adjust_pointer_closure());
2423   JNIHandles::oops_do(adjust_pointer_closure());   // Global (strong) JNI handles
2424   CLDToOopClosure adjust_from_cld(adjust_pointer_closure());
2425   Threads::oops_do(adjust_pointer_closure(), &adjust_from_cld, NULL);
2426   ObjectSynchronizer::oops_do(adjust_pointer_closure());
2427   FlatProfiler::oops_do(adjust_pointer_closure());
2428   Management::oops_do(adjust_pointer_closure());
2429   JvmtiExport::oops_do(adjust_pointer_closure());




 764 }
 765 #endif  // #ifdef ASSERT
 766 
 767 #ifdef NOT_PRODUCT
 768 ParallelCompactData::RegionData* debug_region(size_t region_index) {
 769   ParallelCompactData& sd = PSParallelCompact::summary_data();
 770   return sd.region(region_index);
 771 }
 772 #endif
 773 
 774 elapsedTimer        PSParallelCompact::_accumulated_time;
 775 unsigned int        PSParallelCompact::_total_invocations = 0;
 776 unsigned int        PSParallelCompact::_maximum_compaction_gc_num = 0;
 777 jlong               PSParallelCompact::_time_of_last_gc = 0;
 778 CollectorCounters*  PSParallelCompact::_counters = NULL;
 779 ParMarkBitMap       PSParallelCompact::_mark_bitmap;
 780 ParallelCompactData PSParallelCompact::_summary_data;
 781 
 782 PSParallelCompact::IsAliveClosure PSParallelCompact::_is_alive_closure;
 783 

 784 bool PSParallelCompact::IsAliveClosure::do_object_b(oop p) { return mark_bitmap()->is_marked(p); }
 785 
 786 void PSParallelCompact::KeepAliveClosure::do_oop(oop* p)       { PSParallelCompact::KeepAliveClosure::do_oop_work(p); }
 787 void PSParallelCompact::KeepAliveClosure::do_oop(narrowOop* p) { PSParallelCompact::KeepAliveClosure::do_oop_work(p); }
 788 
 789 PSParallelCompact::AdjustPointerClosure PSParallelCompact::_adjust_pointer_closure;
 790 PSParallelCompact::AdjustKlassClosure PSParallelCompact::_adjust_klass_closure;
 791 
 792 void PSParallelCompact::AdjustPointerClosure::do_oop(oop* p)       { adjust_pointer(p); }
 793 void PSParallelCompact::AdjustPointerClosure::do_oop(narrowOop* p) { adjust_pointer(p); }
 794 
 795 void PSParallelCompact::FollowStackClosure::do_void() { _compaction_manager->follow_marking_stacks(); }
 796 
 797 void PSParallelCompact::MarkAndPushClosure::do_oop(oop* p)       {
 798   mark_and_push(_compaction_manager, p);
 799 }
 800 void PSParallelCompact::MarkAndPushClosure::do_oop(narrowOop* p) { mark_and_push(_compaction_manager, p); }
 801 
 802 void PSParallelCompact::FollowKlassClosure::do_klass(Klass* klass) {
 803   klass->oops_do(_mark_and_push_closure);


2388 }
2389 
2390 void PSParallelCompact::follow_class_loader(ParCompactionManager* cm,
2391                                             ClassLoaderData* cld) {
2392   PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm);
2393   PSParallelCompact::FollowKlassClosure follow_klass_closure(&mark_and_push_closure);
2394 
2395   cld->oops_do(&mark_and_push_closure, &follow_klass_closure, true);
2396 }
2397 
2398 void PSParallelCompact::adjust_class_loader(ParCompactionManager* cm,
2399                                             ClassLoaderData* cld) {
2400   cld->oops_do(PSParallelCompact::adjust_pointer_closure(),
2401                PSParallelCompact::adjust_klass_closure(),
2402                true);
2403 }
2404 
2405 // This should be moved to the shared markSweep code!
2406 class PSAlwaysTrueClosure: public BoolObjectClosure {
2407 public:

2408   bool do_object_b(oop p) { return true; }
2409 };
2410 static PSAlwaysTrueClosure always_true;
2411 
2412 void PSParallelCompact::adjust_roots() {
2413   // Adjust the pointers to reflect the new locations
2414   TraceTime tm("adjust roots", print_phases(), true, gclog_or_tty);
2415 
2416   // Need new claim bits when tracing through and adjusting pointers.
2417   ClassLoaderDataGraph::clear_claimed_marks();
2418 
2419   // General strong roots.
2420   Universe::oops_do(adjust_pointer_closure());
2421   JNIHandles::oops_do(adjust_pointer_closure());   // Global (strong) JNI handles
2422   CLDToOopClosure adjust_from_cld(adjust_pointer_closure());
2423   Threads::oops_do(adjust_pointer_closure(), &adjust_from_cld, NULL);
2424   ObjectSynchronizer::oops_do(adjust_pointer_closure());
2425   FlatProfiler::oops_do(adjust_pointer_closure());
2426   Management::oops_do(adjust_pointer_closure());
2427   JvmtiExport::oops_do(adjust_pointer_closure());