675 static AssertIsPermClosure assert_is_perm_closure; |
675 static AssertIsPermClosure assert_is_perm_closure; |
676 |
676 |
677 void GenCollectedHeap:: |
677 void GenCollectedHeap:: |
678 gen_process_strong_roots(int level, |
678 gen_process_strong_roots(int level, |
679 bool younger_gens_as_roots, |
679 bool younger_gens_as_roots, |
|
680 bool activate_scope, |
680 bool collecting_perm_gen, |
681 bool collecting_perm_gen, |
681 SharedHeap::ScanningOption so, |
682 SharedHeap::ScanningOption so, |
682 OopsInGenClosure* older_gens, |
683 OopsInGenClosure* not_older_gens, |
683 OopsInGenClosure* not_older_gens) { |
684 bool do_code_roots, |
|
685 OopsInGenClosure* older_gens) { |
684 // General strong roots. |
686 // General strong roots. |
685 SharedHeap::process_strong_roots(collecting_perm_gen, so, |
687 |
686 not_older_gens, older_gens); |
688 if (!do_code_roots) { |
|
689 SharedHeap::process_strong_roots(activate_scope, collecting_perm_gen, so, |
|
690 not_older_gens, NULL, older_gens); |
|
691 } else { |
|
692 bool do_code_marking = (activate_scope || nmethod::oops_do_marking_is_active()); |
|
693 CodeBlobToOopClosure code_roots(not_older_gens, /*do_marking=*/ do_code_marking); |
|
694 SharedHeap::process_strong_roots(activate_scope, collecting_perm_gen, so, |
|
695 not_older_gens, &code_roots, older_gens); |
|
696 } |
687 |
697 |
688 if (younger_gens_as_roots) { |
698 if (younger_gens_as_roots) { |
689 if (!_gen_process_strong_tasks->is_task_claimed(GCH_PS_younger_gens)) { |
699 if (!_gen_process_strong_tasks->is_task_claimed(GCH_PS_younger_gens)) { |
690 for (int i = 0; i < level; i++) { |
700 for (int i = 0; i < level; i++) { |
691 not_older_gens->set_generation(_gens[i]); |
701 not_older_gens->set_generation(_gens[i]); |
704 |
714 |
705 _gen_process_strong_tasks->all_tasks_completed(); |
715 _gen_process_strong_tasks->all_tasks_completed(); |
706 } |
716 } |
707 |
717 |
708 void GenCollectedHeap::gen_process_weak_roots(OopClosure* root_closure, |
718 void GenCollectedHeap::gen_process_weak_roots(OopClosure* root_closure, |
|
719 CodeBlobClosure* code_roots, |
709 OopClosure* non_root_closure) { |
720 OopClosure* non_root_closure) { |
710 SharedHeap::process_weak_roots(root_closure, non_root_closure); |
721 SharedHeap::process_weak_roots(root_closure, code_roots, non_root_closure); |
711 // "Local" "weak" refs |
722 // "Local" "weak" refs |
712 for (int i = 0; i < _n_gens; i++) { |
723 for (int i = 0; i < _n_gens; i++) { |
713 _gens[i]->ref_processor()->weak_oops_do(root_closure); |
724 _gens[i]->ref_processor()->weak_oops_do(root_closure); |
714 } |
725 } |
715 } |
726 } |