< prev index next >

src/hotspot/share/code/codeCache.cpp


*** 655,674 **** } } void CodeCache::nmethods_do(void f(nmethod* nm)) { assert_locked_or_safepoint(CodeCache_lock); ! NMethodIterator iter; while(iter.next()) { f(iter.method()); } } void CodeCache::metadata_do(void f(Metadata* m)) { assert_locked_or_safepoint(CodeCache_lock); ! NMethodIterator iter; ! while(iter.next_alive()) { iter.method()->metadata_do(f); } AOTLoader::metadata_do(f); } --- 655,674 ---- } } void CodeCache::nmethods_do(void f(nmethod* nm)) { assert_locked_or_safepoint(CodeCache_lock); ! NMethodIterator iter(NMethodIterator::all_blobs); while(iter.next()) { f(iter.method()); } } void CodeCache::metadata_do(void f(Metadata* m)) { assert_locked_or_safepoint(CodeCache_lock); ! NMethodIterator iter(NMethodIterator::only_alive_and_not_unloading); ! while(iter.next()) { iter.method()->metadata_do(f); } AOTLoader::metadata_do(f); } ***************
*** 682,693 **** // Mark nmethods for unloading if they contain otherwise unreachable oops. void CodeCache::do_unloading(BoolObjectClosure* is_alive, bool unloading_occurred) { assert_locked_or_safepoint(CodeCache_lock); UnloadingScope scope(is_alive); ! CompiledMethodIterator iter; ! while(iter.next_alive()) { iter.method()->do_unloading(unloading_occurred); } } void CodeCache::blobs_do(CodeBlobClosure* f) { --- 682,693 ---- // Mark nmethods for unloading if they contain otherwise unreachable oops. void CodeCache::do_unloading(BoolObjectClosure* is_alive, bool unloading_occurred) { assert_locked_or_safepoint(CodeCache_lock); UnloadingScope scope(is_alive); ! CompiledMethodIterator iter(CompiledMethodIterator::only_alive); ! while(iter.next()) { iter.method()->do_unloading(unloading_occurred); } } void CodeCache::blobs_do(CodeBlobClosure* f) { ***************
*** 840,863 **** verify_perm_nmethods(f); } // Temporarily mark nmethods that are claimed to be on the scavenge list. void CodeCache::mark_scavenge_root_nmethods() { ! NMethodIterator iter; ! while(iter.next_alive()) { nmethod* nm = iter.method(); assert(nm->scavenge_root_not_marked(), "clean state"); if (nm->on_scavenge_root_list()) nm->set_scavenge_root_marked(); } } // If the closure is given, run it on the unlisted nmethods. // Also make sure that the effects of mark_scavenge_root_nmethods is gone. void CodeCache::verify_perm_nmethods(CodeBlobClosure* f_or_null) { ! NMethodIterator iter; ! while(iter.next_alive()) { nmethod* nm = iter.method(); bool call_f = (f_or_null != NULL); assert(nm->scavenge_root_not_marked(), "must be already processed"); if (nm->on_scavenge_root_list()) call_f = false; // don't show this one to the client --- 840,863 ---- verify_perm_nmethods(f); } // Temporarily mark nmethods that are claimed to be on the scavenge list. void CodeCache::mark_scavenge_root_nmethods() { ! NMethodIterator iter(NMethodIterator::only_alive); ! while(iter.next()) { nmethod* nm = iter.method(); assert(nm->scavenge_root_not_marked(), "clean state"); if (nm->on_scavenge_root_list()) nm->set_scavenge_root_marked(); } } // If the closure is given, run it on the unlisted nmethods. // Also make sure that the effects of mark_scavenge_root_nmethods is gone. void CodeCache::verify_perm_nmethods(CodeBlobClosure* f_or_null) { ! NMethodIterator iter(NMethodIterator::only_alive); ! while(iter.next()) { nmethod* nm = iter.method(); bool call_f = (f_or_null != NULL); assert(nm->scavenge_root_not_marked(), "must be already processed"); if (nm->on_scavenge_root_list()) call_f = false; // don't show this one to the client ***************
*** 867,878 **** } #endif //PRODUCT void CodeCache::verify_clean_inline_caches() { #ifdef ASSERT ! NMethodIterator iter; ! while(iter.next_alive()) { nmethod* nm = iter.method(); assert(!nm->is_unloaded(), "Tautology"); nm->verify_clean_inline_caches(); nm->verify(); } --- 867,878 ---- } #endif //PRODUCT void CodeCache::verify_clean_inline_caches() { #ifdef ASSERT ! NMethodIterator iter(NMethodIterator::only_alive_and_not_unloading); ! while(iter.next()) { nmethod* nm = iter.method(); assert(!nm->is_unloaded(), "Tautology"); nm->verify_clean_inline_caches(); nm->verify(); } ***************
*** 941,952 **** } void CodeCache::verify_oops() { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); VerifyOopClosure voc; ! NMethodIterator iter; ! while(iter.next_alive()) { nmethod* nm = iter.method(); nm->oops_do(&voc); nm->verify_oop_relocations(); } } --- 941,952 ---- } void CodeCache::verify_oops() { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); VerifyOopClosure voc; ! NMethodIterator iter(NMethodIterator::only_alive_and_not_unloading); ! while(iter.next()) { nmethod* nm = iter.method(); nm->oops_do(&voc); nm->verify_oop_relocations(); } } ***************
*** 1118,1137 **** return _number_of_nmethods_with_dependencies; } void CodeCache::clear_inline_caches() { assert_locked_or_safepoint(CodeCache_lock); ! CompiledMethodIterator iter; ! while(iter.next_alive()) { iter.method()->clear_inline_caches(); } } void CodeCache::cleanup_inline_caches() { assert_locked_or_safepoint(CodeCache_lock); ! NMethodIterator iter; ! while(iter.next_alive()) { iter.method()->cleanup_inline_caches(/*clean_all=*/true); } } // Keeps track of time spent for checking dependencies --- 1118,1137 ---- return _number_of_nmethods_with_dependencies; } void CodeCache::clear_inline_caches() { assert_locked_or_safepoint(CodeCache_lock); ! CompiledMethodIterator iter(CompiledMethodIterator::only_alive_and_not_unloading); ! while(iter.next()) { iter.method()->clear_inline_caches(); } } void CodeCache::cleanup_inline_caches() { assert_locked_or_safepoint(CodeCache_lock); ! NMethodIterator iter(NMethodIterator::only_alive_and_not_unloading); ! while(iter.next()) { iter.method()->cleanup_inline_caches(/*clean_all=*/true); } } // Keeps track of time spent for checking dependencies ***************
*** 1197,1208 **** nm->mark_for_deoptimization(); number_of_marked_CodeBlobs++; } } ! CompiledMethodIterator iter; ! while(iter.next_alive()) { CompiledMethod* nm = iter.method(); if (nm->is_marked_for_deoptimization()) { // ...Already marked in the previous pass; don't count it again. } else if (nm->is_evol_dependent_on(dependee)) { ResourceMark rm; --- 1197,1208 ---- nm->mark_for_deoptimization(); number_of_marked_CodeBlobs++; } } ! CompiledMethodIterator iter(CompiledMethodIterator::only_alive_and_not_unloading); ! while(iter.next()) { CompiledMethod* nm = iter.method(); if (nm->is_marked_for_deoptimization()) { // ...Already marked in the previous pass; don't count it again. } else if (nm->is_evol_dependent_on(dependee)) { ResourceMark rm; ***************
*** 1220,1231 **** // Deoptimize all methods void CodeCache::mark_all_nmethods_for_deoptimization() { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); ! CompiledMethodIterator iter; ! while(iter.next_alive()) { CompiledMethod* nm = iter.method(); if (!nm->method()->is_method_handle_intrinsic()) { nm->mark_for_deoptimization(); } } --- 1220,1231 ---- // Deoptimize all methods void CodeCache::mark_all_nmethods_for_deoptimization() { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); ! CompiledMethodIterator iter(CompiledMethodIterator::only_alive_and_not_unloading); ! while(iter.next()) { CompiledMethod* nm = iter.method(); if (!nm->method()->is_method_handle_intrinsic()) { nm->mark_for_deoptimization(); } } ***************
*** 1233,1244 **** int CodeCache::mark_for_deoptimization(Method* dependee) { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); int number_of_marked_CodeBlobs = 0; ! CompiledMethodIterator iter; ! while(iter.next_alive()) { CompiledMethod* nm = iter.method(); if (nm->is_dependent_on_method(dependee)) { ResourceMark rm; nm->mark_for_deoptimization(); number_of_marked_CodeBlobs++; --- 1233,1244 ---- int CodeCache::mark_for_deoptimization(Method* dependee) { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); int number_of_marked_CodeBlobs = 0; ! CompiledMethodIterator iter(CompiledMethodIterator::only_alive_and_not_unloading); ! while(iter.next()) { CompiledMethod* nm = iter.method(); if (nm->is_dependent_on_method(dependee)) { ResourceMark rm; nm->mark_for_deoptimization(); number_of_marked_CodeBlobs++; ***************
*** 1248,1259 **** return number_of_marked_CodeBlobs; } void CodeCache::make_marked_nmethods_not_entrant() { assert_locked_or_safepoint(CodeCache_lock); ! CompiledMethodIterator iter; ! while(iter.next_alive()) { CompiledMethod* nm = iter.method(); if (nm->is_marked_for_deoptimization() && !nm->is_not_entrant()) { nm->make_not_entrant(); } } --- 1248,1259 ---- return number_of_marked_CodeBlobs; } void CodeCache::make_marked_nmethods_not_entrant() { assert_locked_or_safepoint(CodeCache_lock); ! CompiledMethodIterator iter(CompiledMethodIterator::only_alive_and_not_unloading); ! while(iter.next()) { CompiledMethod* nm = iter.method(); if (nm->is_marked_for_deoptimization() && !nm->is_not_entrant()) { nm->make_not_entrant(); } } ***************
*** 1517,1527 **** int bucketSize = 512; int bucketLimit = max_nm_size / bucketSize + 1; int *buckets = NEW_C_HEAP_ARRAY(int, bucketLimit, mtCode); memset(buckets, 0, sizeof(int) * bucketLimit); ! NMethodIterator iter; while(iter.next()) { nmethod* nm = iter.method(); if(nm->method() != NULL && nm->is_java_method()) { buckets[nm->size() / bucketSize]++; } --- 1517,1527 ---- int bucketSize = 512; int bucketLimit = max_nm_size / bucketSize + 1; int *buckets = NEW_C_HEAP_ARRAY(int, bucketLimit, mtCode); memset(buckets, 0, sizeof(int) * bucketLimit); ! NMethodIterator iter(NMethodIterator::all_blobs); while(iter.next()) { nmethod* nm = iter.method(); if(nm->method() != NULL && nm->is_java_method()) { buckets[nm->size() / bucketSize]++; } ***************
*** 1657,1668 **** } void CodeCache::print_codelist(outputStream* st) { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); ! CompiledMethodIterator iter; ! while (iter.next_alive()) { CompiledMethod* cm = iter.method(); ResourceMark rm; char* method_name = cm->method()->name_and_sig_as_C_string(); st->print_cr("%d %d %d %s [" INTPTR_FORMAT ", " INTPTR_FORMAT " - " INTPTR_FORMAT "]", cm->compile_id(), cm->comp_level(), cm->get_state(), --- 1657,1668 ---- } void CodeCache::print_codelist(outputStream* st) { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); ! CompiledMethodIterator iter(CompiledMethodIterator::only_alive_and_not_unloading); ! while (iter.next()) { CompiledMethod* cm = iter.method(); ResourceMark rm; char* method_name = cm->method()->name_and_sig_as_C_string(); st->print_cr("%d %d %d %s [" INTPTR_FORMAT ", " INTPTR_FORMAT " - " INTPTR_FORMAT "]", cm->compile_id(), cm->comp_level(), cm->get_state(),
< prev index next >