src/share/vm/memory/genCollectedHeap.cpp

changeset 1424
148e5441d916
parent 1316
16c930df1e9b
child 1590
4e6abf09f540
child 1601
7b0e9cba0307
equal deleted inserted replaced
1422:00977607da34 1424:148e5441d916
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 }

mercurial