src/share/vm/code/nmethod.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File JDK-7194669 Cdiff src/share/vm/code/nmethod.cpp

src/share/vm/code/nmethod.cpp

Print this page

        

*** 2159,2178 **** return NULL; } } ! bool nmethod::check_all_dependencies() { ! bool found_check = false; ! // wholesale check of all dependencies ! for (Dependencies::DepStream deps(this); deps.next(); ) { if (deps.check_dependency() != NULL) { ! found_check = true; ! NOT_DEBUG(break); } } - return found_check; // tell caller if we found anything } bool nmethod::check_dependency_on(DepChange& changes) { // What has happened: // 1) a new class dependee has been added --- 2159,2200 ---- return NULL; } } ! void nmethod::check_all_dependencies(DepChange& changes) { ! // Checked dependencies are allocated into this ResourceMark ! ResourceMark rm; ! ! // Turn off dependency tracing while actually testing dependencies. ! NOT_PRODUCT( FlagSetting fs(TraceDependencies, false) ); ! ! // 'dep_signature_buffers' caches already checked dependencies. ! DependencySignatureBuffer dep_signature_buffers; ! ! // Iterate over live nmethods and check dependencies of all nmethods that are not ! // marked for deoptimization. A particular dependency is only checked once. ! for(nmethod* nm = CodeCache::alive_nmethod(CodeCache::first()); nm != NULL; nm = CodeCache::alive_nmethod(CodeCache::next(nm))) { ! if (!nm->is_marked_for_deoptimization()) { ! for (Dependencies::DepStream deps(nm); deps.next(); ) { ! // Construct abstraction of a dependency. ! DependencySignature current_sig(deps); ! // Determine if 'deps' is already checked. If it is not checked, ! // 'add_if_missing()' adds the dependency signature and returns ! // false. ! if (!dep_signature_buffers.add_if_missing(current_sig)) { if (deps.check_dependency() != NULL) { ! ResourceMark rm; ! tty->print_cr("Should have been marked for deoptimization:"); ! changes.print(); ! nm->print(); ! nm->print_dependencies(); ! } ! } ! } } } } bool nmethod::check_dependency_on(DepChange& changes) { // What has happened: // 1) a new class dependee has been added
src/share/vm/code/nmethod.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File