diff -r 261ecc5bb65e -r 5435e77aa3df hotspot/src/share/vm/code/codeCache.cpp --- a/hotspot/src/share/vm/code/codeCache.cpp Thu May 20 01:34:22 2010 -0700 +++ b/hotspot/src/share/vm/code/codeCache.cpp Thu May 20 06:34:23 2010 -0700 @@ -74,12 +74,12 @@ total_size += cb->size(); header_size += cb->header_size(); relocation_size += cb->relocation_size(); - scopes_oop_size += cb->oops_size(); if (cb->is_nmethod()) { - nmethod *nm = (nmethod*)cb; + nmethod* nm = cb->as_nmethod_or_null(); code_size += nm->code_size(); stub_size += nm->stub_size(); + scopes_oop_size += nm->oops_size(); scopes_data_size += nm->scopes_data_size(); scopes_pcs_size += nm->scopes_pcs_size(); } else { @@ -262,14 +262,14 @@ } -// Mark code blobs for unloading if they contain otherwise -// unreachable oops. +// Mark nmethods for unloading if they contain otherwise unreachable +// oops. void CodeCache::do_unloading(BoolObjectClosure* is_alive, OopClosure* keep_alive, bool unloading_occurred) { assert_locked_or_safepoint(CodeCache_lock); - FOR_ALL_ALIVE_BLOBS(cb) { - cb->do_unloading(is_alive, keep_alive, unloading_occurred); + FOR_ALL_ALIVE_NMETHODS(nm) { + nm->do_unloading(is_alive, keep_alive, unloading_occurred); } } @@ -509,9 +509,9 @@ if (needs_cache_clean()) { nm->cleanup_inline_caches(); } - debug_only(nm->verify();) + DEBUG_ONLY(nm->verify()); + nm->fix_oop_relocations(); } - cb->fix_oop_relocations(); } set_needs_cache_clean(false); prune_scavenge_root_nmethods();