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