Mercurial > hg > truffle
diff src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp @ 1000:a1423fe86a18
Merge
author | trims |
---|---|
date | Fri, 09 Oct 2009 15:18:52 -0700 |
parents | 89e0543e1737 54b3b351d6f9 |
children | 2a1472c30599 |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp Fri Oct 02 11:26:25 2009 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp Fri Oct 09 15:18:52 2009 -0700 @@ -39,12 +39,13 @@ ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(which); PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); + 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); + _java_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs); if (_vm_thread != NULL) - _vm_thread->oops_do(&mark_and_push_closure); + _vm_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs); // Do the real work cm->drain_marking_stacks(&mark_and_push_closure); @@ -78,7 +79,8 @@ case threads: { ResourceMark rm; - Threads::oops_do(&mark_and_push_closure); + CodeBlobToOopClosure each_active_code_blob(&mark_and_push_closure, /*do_marking=*/ true); + Threads::oops_do(&mark_and_push_closure, &each_active_code_blob); } break; @@ -106,6 +108,11 @@ vmSymbols::oops_do(&mark_and_push_closure); break; + case code_cache: + // Do not treat nmethods as strong roots for mark/sweep, since we can unload them. + //CodeCache::scavenge_root_nmethods_do(CodeBlobToOopClosure(&mark_and_push_closure)); + break; + default: fatal("Unknown root type"); }