src/share/vm/code/nmethod.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/code/nmethod.cpp	Tue Jan 14 12:43:57 2014
--- new/src/share/vm/code/nmethod.cpp	Tue Jan 14 12:43:57 2014

*** 2159,2178 **** --- 2159,2200 ---- return NULL; } } ! bool nmethod::check_all_dependencies() { bool found_check = false; // wholesale check of all dependencies for (Dependencies::DepStream deps(this); deps.next(); ) { ! 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) { ! found_check = true; ! NOT_DEBUG(break); ! ResourceMark rm; ! tty->print_cr("Should have been marked for deoptimization:"); + changes.print(); + nm->print(); + nm->print_dependencies(); + } + } + } } } 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

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