1.1 --- a/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp Fri Oct 02 11:26:25 2009 -0700 1.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp Fri Oct 09 15:18:52 2009 -0700 1.3 @@ -39,12 +39,13 @@ 1.4 ParCompactionManager* cm = 1.5 ParCompactionManager::gc_thread_compaction_manager(which); 1.6 PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); 1.7 + CodeBlobToOopClosure mark_and_push_in_blobs(&mark_and_push_closure, /*do_marking=*/ true); 1.8 1.9 if (_java_thread != NULL) 1.10 - _java_thread->oops_do(&mark_and_push_closure); 1.11 + _java_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs); 1.12 1.13 if (_vm_thread != NULL) 1.14 - _vm_thread->oops_do(&mark_and_push_closure); 1.15 + _vm_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs); 1.16 1.17 // Do the real work 1.18 cm->drain_marking_stacks(&mark_and_push_closure); 1.19 @@ -78,7 +79,8 @@ 1.20 case threads: 1.21 { 1.22 ResourceMark rm; 1.23 - Threads::oops_do(&mark_and_push_closure); 1.24 + CodeBlobToOopClosure each_active_code_blob(&mark_and_push_closure, /*do_marking=*/ true); 1.25 + Threads::oops_do(&mark_and_push_closure, &each_active_code_blob); 1.26 } 1.27 break; 1.28 1.29 @@ -106,6 +108,11 @@ 1.30 vmSymbols::oops_do(&mark_and_push_closure); 1.31 break; 1.32 1.33 + case code_cache: 1.34 + // Do not treat nmethods as strong roots for mark/sweep, since we can unload them. 1.35 + //CodeCache::scavenge_root_nmethods_do(CodeBlobToOopClosure(&mark_and_push_closure)); 1.36 + break; 1.37 + 1.38 default: 1.39 fatal("Unknown root type"); 1.40 }