hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp
changeset 3919 b15d85d98b61
parent 3795 6227ff014cfe
parent 3912 3aaaaad1ccb0
child 5076 8b74a4b60b31
equal deleted inserted replaced
3903:9decc1272344 3919:b15d85d98b61
    37   NOT_PRODUCT(TraceTime tm("ThreadRootsMarkingTask",
    37   NOT_PRODUCT(TraceTime tm("ThreadRootsMarkingTask",
    38     PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty));
    38     PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty));
    39   ParCompactionManager* cm =
    39   ParCompactionManager* cm =
    40     ParCompactionManager::gc_thread_compaction_manager(which);
    40     ParCompactionManager::gc_thread_compaction_manager(which);
    41   PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm);
    41   PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm);
       
    42   CodeBlobToOopClosure mark_and_push_in_blobs(&mark_and_push_closure, /*do_marking=*/ true);
    42 
    43 
    43   if (_java_thread != NULL)
    44   if (_java_thread != NULL)
    44     _java_thread->oops_do(&mark_and_push_closure);
    45     _java_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs);
    45 
    46 
    46   if (_vm_thread != NULL)
    47   if (_vm_thread != NULL)
    47     _vm_thread->oops_do(&mark_and_push_closure);
    48     _vm_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs);
    48 
    49 
    49   // Do the real work
    50   // Do the real work
    50   cm->drain_marking_stacks(&mark_and_push_closure);
    51   cm->drain_marking_stacks(&mark_and_push_closure);
    51 }
    52 }
    52 
    53 
    76       break;
    77       break;
    77 
    78 
    78     case threads:
    79     case threads:
    79     {
    80     {
    80       ResourceMark rm;
    81       ResourceMark rm;
    81       Threads::oops_do(&mark_and_push_closure);
    82       CodeBlobToOopClosure each_active_code_blob(&mark_and_push_closure, /*do_marking=*/ true);
       
    83       Threads::oops_do(&mark_and_push_closure, &each_active_code_blob);
    82     }
    84     }
    83     break;
    85     break;
    84 
    86 
    85     case object_synchronizer:
    87     case object_synchronizer:
    86       ObjectSynchronizer::oops_do(&mark_and_push_closure);
    88       ObjectSynchronizer::oops_do(&mark_and_push_closure);
   102       SystemDictionary::always_strong_oops_do(&mark_and_push_closure);
   104       SystemDictionary::always_strong_oops_do(&mark_and_push_closure);
   103       break;
   105       break;
   104 
   106 
   105     case vm_symbols:
   107     case vm_symbols:
   106       vmSymbols::oops_do(&mark_and_push_closure);
   108       vmSymbols::oops_do(&mark_and_push_closure);
       
   109       break;
       
   110 
       
   111     case code_cache:
       
   112       // Do not treat nmethods as strong roots for mark/sweep, since we can unload them.
       
   113       //CodeCache::scavenge_root_nmethods_do(CodeBlobToOopClosure(&mark_and_push_closure));
   107       break;
   114       break;
   108 
   115 
   109     default:
   116     default:
   110       fatal("Unknown root type");
   117       fatal("Unknown root type");
   111   }
   118   }