8134493: Cleaning inline caches of unloaded nmethods should be done in sweeper

Clean ICs of unloaded nmethods in sweeper to avoid impact on safepoint duration.

Reviewed-by: kvn, mdoerr
This commit is contained in:
Tobias Hartmann 2015-08-31 13:49:18 +02:00
parent 9dcbe322e0
commit 7b6480cfa4
6 changed files with 20 additions and 14 deletions

View file

@ -1050,7 +1050,7 @@ void nmethod::cleanup_inline_caches() {
if( cb != NULL && cb->is_nmethod() ) {
nmethod* nm = (nmethod*)cb;
// Clean inline caches pointing to zombie, non-entrant and unloaded methods
if (!nm->is_in_use() || (nm->method()->code() != nm)) ic->set_to_clean();
if (!nm->is_in_use() || (nm->method()->code() != nm)) ic->set_to_clean(is_alive());
}
break;
}
@ -1150,7 +1150,7 @@ void nmethod::mark_as_seen_on_stack() {
// Tell if a non-entrant method can be converted to a zombie (i.e.,
// there are no activations on the stack, not in use by the VM,
// and not in use by the ServiceThread)
bool nmethod::can_not_entrant_be_converted() {
bool nmethod::can_convert_to_zombie() {
assert(is_not_entrant(), "must be a non-entrant method");
// Since the nmethod sweeper only does partial sweep the sweeper's traversal