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 -