Mercurial > hg > graal-compiler
diff src/share/vm/runtime/sweeper.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 | a61af66fc99e |
children | 54b3b351d6f9 |
line wrap: on
line diff
--- a/src/share/vm/runtime/sweeper.cpp Tue Sep 15 11:09:34 2009 -0700 +++ b/src/share/vm/runtime/sweeper.cpp Tue Sep 15 21:53:47 2009 -0700 @@ -34,6 +34,17 @@ jint NMethodSweeper::_not_entrant_seen_on_stack = 0; bool NMethodSweeper::_rescan = false; +class MarkActivationClosure: public CodeBlobClosure { +public: + virtual void do_code_blob(CodeBlob* cb) { + // If we see an activation belonging to a non_entrant nmethod, we mark it. + if (cb->is_nmethod() && ((nmethod*)cb)->is_not_entrant()) { + ((nmethod*)cb)->mark_as_seen_on_stack(); + } + } +}; +static MarkActivationClosure mark_activation_closure; + void NMethodSweeper::sweep() { assert(SafepointSynchronize::is_at_safepoint(), "must be executed at a safepoint"); if (!MethodFlushing) return; @@ -57,7 +68,7 @@ if (PrintMethodFlushing) { tty->print_cr("### Sweep: stack traversal %d", _traversals); } - Threads::nmethods_do(); + Threads::nmethods_do(&mark_activation_closure); // reset the flags since we started a scan from the beginning. _rescan = false;