src/share/vm/memory/iterator.cpp

changeset 6992
2c6ef90f030a
parent 6982
4c1b88a53c74
child 7535
7ae4e26cb1e0
     1.1 --- a/src/share/vm/memory/iterator.cpp	Tue Jul 01 09:03:55 2014 +0200
     1.2 +++ b/src/share/vm/memory/iterator.cpp	Mon Jul 07 10:12:40 2014 +0200
     1.3 @@ -35,6 +35,10 @@
     1.4    cld->oops_do(_oop_closure, &_klass_closure, _must_claim_cld);
     1.5  }
     1.6  
     1.7 +void CLDToKlassAndOopClosure::do_cld(ClassLoaderData* cld) {
     1.8 +  cld->oops_do(_oop_closure, _klass_closure, _must_claim_cld);
     1.9 +}
    1.10 +
    1.11  void ObjectToOopClosure::do_object(oop obj) {
    1.12    obj->oop_iterate(_cl);
    1.13  }
    1.14 @@ -43,6 +47,20 @@
    1.15    ShouldNotCallThis();
    1.16  }
    1.17  
    1.18 +void CodeBlobToOopClosure::do_nmethod(nmethod* nm) {
    1.19 +  nm->oops_do(_cl);
    1.20 +  if (_fix_relocations) {
    1.21 +    nm->fix_oop_relocations();
    1.22 +  }
    1.23 +}
    1.24 +
    1.25 +void CodeBlobToOopClosure::do_code_blob(CodeBlob* cb) {
    1.26 +  nmethod* nm = cb->as_nmethod_or_null();
    1.27 +  if (nm != NULL) {
    1.28 +    do_nmethod(nm);
    1.29 +  }
    1.30 +}
    1.31 +
    1.32  MarkingCodeBlobClosure::MarkScope::MarkScope(bool activate)
    1.33    : _active(activate)
    1.34  {
    1.35 @@ -55,32 +73,7 @@
    1.36  
    1.37  void MarkingCodeBlobClosure::do_code_blob(CodeBlob* cb) {
    1.38    nmethod* nm = cb->as_nmethod_or_null();
    1.39 -  if (nm == NULL)  return;
    1.40 -  if (!nm->test_set_oops_do_mark()) {
    1.41 -    NOT_PRODUCT(if (TraceScavenge)  nm->print_on(tty, "oops_do, 1st visit\n"));
    1.42 -    do_newly_marked_nmethod(nm);
    1.43 -  } else {
    1.44 -    NOT_PRODUCT(if (TraceScavenge)  nm->print_on(tty, "oops_do, skipped on 2nd visit\n"));
    1.45 +  if (nm != NULL && !nm->test_set_oops_do_mark()) {
    1.46 +    do_nmethod(nm);
    1.47    }
    1.48  }
    1.49 -
    1.50 -void CodeBlobToOopClosure::do_newly_marked_nmethod(nmethod* nm) {
    1.51 -  nm->oops_do(_cl, /*allow_zombie=*/ false);
    1.52 -}
    1.53 -
    1.54 -void CodeBlobToOopClosure::do_code_blob(CodeBlob* cb) {
    1.55 -  if (!_do_marking) {
    1.56 -    nmethod* nm = cb->as_nmethod_or_null();
    1.57 -    NOT_PRODUCT(if (TraceScavenge && Verbose && nm != NULL)  nm->print_on(tty, "oops_do, unmarked visit\n"));
    1.58 -    // This assert won't work, since there are lots of mini-passes
    1.59 -    // (mostly in debug mode) that co-exist with marking phases.
    1.60 -    //assert(!(cb->is_nmethod() && ((nmethod*)cb)->test_oops_do_mark()), "found marked nmethod during mark-free phase");
    1.61 -    if (nm != NULL) {
    1.62 -      nm->oops_do(_cl);
    1.63 -    }
    1.64 -  } else {
    1.65 -    MarkingCodeBlobClosure::do_code_blob(cb);
    1.66 -  }
    1.67 -}
    1.68 -
    1.69 -

mercurial