Mercurial > hg > graal-compiler
comparison src/share/vm/memory/genCollectedHeap.cpp @ 989:148e5441d916
6863023: need non-perm oops in code cache for JSR 292
Summary: Make a special root-list for those few nmethods which might contain non-perm oops.
Reviewed-by: twisti, kvn, never, jmasa, ysr
author | jrose |
---|---|
date | Tue, 15 Sep 2009 21:53:47 -0700 |
parents | 16c930df1e9b |
children | 4e6abf09f540 7b0e9cba0307 |
comparison
equal
deleted
inserted
replaced
987:00977607da34 | 989: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 } |