void ThreadRootsMarkingTask::do_it(GCTaskManager* manager, uint which) { assert(Universe::heap()->is_gc_active(), "called outside gc"); ResourceMark rm; NOT_PRODUCT(TraceTime tm("ThreadRootsMarkingTask", PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty)); ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(which); PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); CLDToOopClosure mark_and_push_from_clds(&mark_and_push_closure, true); CodeBlobToOopClosure mark_and_push_in_blobs(&mark_and_push_closure, /*do_marking=*/ true); if (_java_thread != NULL) _java_thread->oops_do( &mark_and_push_closure, &mark_and_push_from_clds, &mark_and_push_in_blobs); if (_vm_thread != NULL) _vm_thread->oops_do( &mark_and_push_closure, &mark_and_push_from_clds, &mark_and_push_in_blobs); // Do the real work cm->follow_marking_stacks(); }
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC // // ThreadRootsMarkingTask // void ThreadRootsMarkingTask::do_it(GCTaskManager* manager, uint which) { assert(Universe::heap()->is_gc_active(), "called outside gc"); ResourceMark rm; NOT_PRODUCT(GCTraceTime tm("ThreadRootsMarkingTask", PrintGCDetails && TraceParallelOldGCTasks, true, NULL, PSParallelCompact::gc_tracer()->gc_id())); ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(which); PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); CLDToOopClosure mark_and_push_from_clds(&mark_and_push_closure, true); MarkingCodeBlobClosure mark_and_push_in_blobs(&mark_and_push_closure, !CodeBlobToOopClosure::FixRelocations); if (_java_thread != NULL) _java_thread->oops_do( &mark_and_push_closure, &mark_and_push_from_clds, &mark_and_push_in_blobs); if (_vm_thread != NULL) _vm_thread->oops_do( &mark_and_push_closure, &mark_and_push_from_clds, &mark_and_push_in_blobs); // Do the real work cm->follow_marking_stacks(); }