1.1 --- a/src/share/vm/memory/genCollectedHeap.cpp Tue Sep 15 11:09:34 2009 -0700 1.2 +++ b/src/share/vm/memory/genCollectedHeap.cpp Tue Sep 15 21:53:47 2009 -0700 1.3 @@ -677,13 +677,23 @@ 1.4 void GenCollectedHeap:: 1.5 gen_process_strong_roots(int level, 1.6 bool younger_gens_as_roots, 1.7 + bool activate_scope, 1.8 bool collecting_perm_gen, 1.9 SharedHeap::ScanningOption so, 1.10 - OopsInGenClosure* older_gens, 1.11 - OopsInGenClosure* not_older_gens) { 1.12 + OopsInGenClosure* not_older_gens, 1.13 + bool do_code_roots, 1.14 + OopsInGenClosure* older_gens) { 1.15 // General strong roots. 1.16 - SharedHeap::process_strong_roots(collecting_perm_gen, so, 1.17 - not_older_gens, older_gens); 1.18 + 1.19 + if (!do_code_roots) { 1.20 + SharedHeap::process_strong_roots(activate_scope, collecting_perm_gen, so, 1.21 + not_older_gens, NULL, older_gens); 1.22 + } else { 1.23 + bool do_code_marking = (activate_scope || nmethod::oops_do_marking_is_active()); 1.24 + CodeBlobToOopClosure code_roots(not_older_gens, /*do_marking=*/ do_code_marking); 1.25 + SharedHeap::process_strong_roots(activate_scope, collecting_perm_gen, so, 1.26 + not_older_gens, &code_roots, older_gens); 1.27 + } 1.28 1.29 if (younger_gens_as_roots) { 1.30 if (!_gen_process_strong_tasks->is_task_claimed(GCH_PS_younger_gens)) { 1.31 @@ -706,8 +716,9 @@ 1.32 } 1.33 1.34 void GenCollectedHeap::gen_process_weak_roots(OopClosure* root_closure, 1.35 + CodeBlobClosure* code_roots, 1.36 OopClosure* non_root_closure) { 1.37 - SharedHeap::process_weak_roots(root_closure, non_root_closure); 1.38 + SharedHeap::process_weak_roots(root_closure, code_roots, non_root_closure); 1.39 // "Local" "weak" refs 1.40 for (int i = 0; i < _n_gens; i++) { 1.41 _gens[i]->ref_processor()->weak_oops_do(root_closure);