42 #include "services/management.hpp" 43 44 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC 45 46 // 47 // ThreadRootsMarkingTask 48 // 49 50 void ThreadRootsMarkingTask::do_it(GCTaskManager* manager, uint which) { 51 assert(Universe::heap()->is_gc_active(), "called outside gc"); 52 53 ResourceMark rm; 54 55 NOT_PRODUCT(GCTraceTime tm("ThreadRootsMarkingTask", 56 PrintGCDetails && TraceParallelOldGCTasks, true, NULL, PSParallelCompact::gc_tracer()->gc_id())); 57 ParCompactionManager* cm = 58 ParCompactionManager::gc_thread_compaction_manager(which); 59 60 PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); 61 CLDToOopClosure mark_and_push_from_clds(&mark_and_push_closure, true); 62 CodeBlobToOopClosure mark_and_push_in_blobs(&mark_and_push_closure, /*do_marking=*/ true); 63 64 if (_java_thread != NULL) 65 _java_thread->oops_do( 66 &mark_and_push_closure, 67 &mark_and_push_from_clds, 68 &mark_and_push_in_blobs); 69 70 if (_vm_thread != NULL) 71 _vm_thread->oops_do( 72 &mark_and_push_closure, 73 &mark_and_push_from_clds, 74 &mark_and_push_in_blobs); 75 76 // Do the real work 77 cm->follow_marking_stacks(); 78 } 79 80 81 void MarkFromRootsTask::do_it(GCTaskManager* manager, uint which) { 82 assert(Universe::heap()->is_gc_active(), "called outside gc"); 83 84 NOT_PRODUCT(GCTraceTime tm("MarkFromRootsTask", 85 PrintGCDetails && TraceParallelOldGCTasks, true, NULL, PSParallelCompact::gc_tracer()->gc_id())); 86 ParCompactionManager* cm = 87 ParCompactionManager::gc_thread_compaction_manager(which); 88 PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); 89 PSParallelCompact::FollowKlassClosure follow_klass_closure(&mark_and_push_closure); 90 91 switch (_root_type) { 92 case universe: 93 Universe::oops_do(&mark_and_push_closure); 94 break; 95 96 case jni_handles: 97 JNIHandles::oops_do(&mark_and_push_closure); 98 break; 99 100 case threads: 101 { 102 ResourceMark rm; 103 CodeBlobToOopClosure each_active_code_blob(&mark_and_push_closure, /*do_marking=*/ true); 104 CLDToOopClosure mark_and_push_from_cld(&mark_and_push_closure); 105 Threads::oops_do(&mark_and_push_closure, &mark_and_push_from_cld, &each_active_code_blob); 106 } 107 break; 108 109 case object_synchronizer: 110 ObjectSynchronizer::oops_do(&mark_and_push_closure); 111 break; 112 113 case flat_profiler: 114 FlatProfiler::oops_do(&mark_and_push_closure); 115 break; 116 117 case management: 118 Management::oops_do(&mark_and_push_closure); 119 break; 120 121 case jvmti: 122 JvmtiExport::oops_do(&mark_and_push_closure); 123 break; | 42 #include "services/management.hpp" 43 44 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC 45 46 // 47 // ThreadRootsMarkingTask 48 // 49 50 void ThreadRootsMarkingTask::do_it(GCTaskManager* manager, uint which) { 51 assert(Universe::heap()->is_gc_active(), "called outside gc"); 52 53 ResourceMark rm; 54 55 NOT_PRODUCT(GCTraceTime tm("ThreadRootsMarkingTask", 56 PrintGCDetails && TraceParallelOldGCTasks, true, NULL, PSParallelCompact::gc_tracer()->gc_id())); 57 ParCompactionManager* cm = 58 ParCompactionManager::gc_thread_compaction_manager(which); 59 60 PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); 61 CLDToOopClosure mark_and_push_from_clds(&mark_and_push_closure, true); 62 MarkingCodeBlobClosure mark_and_push_in_blobs(&mark_and_push_closure, !CodeBlobToOopClosure::FixRelocations); 63 64 if (_java_thread != NULL) 65 _java_thread->oops_do( 66 &mark_and_push_closure, 67 &mark_and_push_from_clds, 68 &mark_and_push_in_blobs); 69 70 if (_vm_thread != NULL) 71 _vm_thread->oops_do( 72 &mark_and_push_closure, 73 &mark_and_push_from_clds, 74 &mark_and_push_in_blobs); 75 76 // Do the real work 77 cm->follow_marking_stacks(); 78 } 79 80 81 void MarkFromRootsTask::do_it(GCTaskManager* manager, uint which) { 82 assert(Universe::heap()->is_gc_active(), "called outside gc"); 83 84 NOT_PRODUCT(GCTraceTime tm("MarkFromRootsTask", 85 PrintGCDetails && TraceParallelOldGCTasks, true, NULL, PSParallelCompact::gc_tracer()->gc_id())); 86 ParCompactionManager* cm = 87 ParCompactionManager::gc_thread_compaction_manager(which); 88 PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); 89 PSParallelCompact::FollowKlassClosure follow_klass_closure(&mark_and_push_closure); 90 91 switch (_root_type) { 92 case universe: 93 Universe::oops_do(&mark_and_push_closure); 94 break; 95 96 case jni_handles: 97 JNIHandles::oops_do(&mark_and_push_closure); 98 break; 99 100 case threads: 101 { 102 ResourceMark rm; 103 MarkingCodeBlobClosure each_active_code_blob(&mark_and_push_closure, !CodeBlobToOopClosure::FixRelocations); 104 CLDToOopClosure mark_and_push_from_cld(&mark_and_push_closure); 105 Threads::oops_do(&mark_and_push_closure, &mark_and_push_from_cld, &each_active_code_blob); 106 } 107 break; 108 109 case object_synchronizer: 110 ObjectSynchronizer::oops_do(&mark_and_push_closure); 111 break; 112 113 case flat_profiler: 114 FlatProfiler::oops_do(&mark_and_push_closure); 115 break; 116 117 case management: 118 Management::oops_do(&mark_and_push_closure); 119 break; 120 121 case jvmti: 122 JvmtiExport::oops_do(&mark_and_push_closure); 123 break; |