src/share/vm/memory/genCollectedHeap.cpp

changeset 1424
148e5441d916
parent 1316
16c930df1e9b
child 1590
4e6abf09f540
child 1601
7b0e9cba0307
     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);

mercurial