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

src/share/vm/code/codeCache.cpp

Print this page

        

*** 626,647 **** } if (VerifyDependencies) { // Turn off dependency tracing while actually testing deps. NOT_PRODUCT( FlagSetting fs(TraceDependencies, false) ); FOR_ALL_ALIVE_NMETHODS(nm) { ! if (!nm->is_marked_for_deoptimization() && ! nm->check_all_dependencies()) { ResourceMark rm; tty->print_cr("Should have been marked for deoptimization:"); changes.print(); nm->print(); nm->print_dependencies(); } } } - #ifndef PRODUCT dependentCheckTime.stop(); #endif // PRODUCT return number_of_marked_CodeBlobs; --- 626,670 ---- } if (VerifyDependencies) { // Turn off dependency tracing while actually testing deps. NOT_PRODUCT( FlagSetting fs(TraceDependencies, false) ); + + ResourceMark rm; + // 'signature_buffers' is used to cache already checked dependencies. + GrowableArray<DependencySignatureBuffer*>* dep_signature_buffers = new GrowableArray<DependencySignatureBuffer*>(); + + // Iterate over live nmethods and check dependencies of all nmethods that are not + // marked for deoptimization. FOR_ALL_ALIVE_NMETHODS(nm) { ! if (!nm->is_marked_for_deoptimization()) { ! for (Dependencies::DepStream deps(nm); deps.next(); ) { ! // Get dependency signature buffer for a specific dependency type signature ! DependencySignatureBuffer* buffer = DependencySignatureBuffer::buffer(dep_signature_buffers, deps.type()); ! // A DependencySignature object abstracts a dependency. ! DependencySignature current_sig(&deps); ! ! // Check if the current dependency is already checked ! if (!buffer->contains(&current_sig)) { ! // If the dependency has not already been checked, perform the check and add the ! // current dependency signature to the checked dependency signatures. ! ! // Check dependency and print out an error if the dependency check fails. ! if (deps.check_dependency() != NULL) { ResourceMark rm; tty->print_cr("Should have been marked for deoptimization:"); changes.print(); nm->print(); nm->print_dependencies(); } + // Add dependency signature to checked dependencies + buffer->add(&current_sig); + } + } + } } } #ifndef PRODUCT dependentCheckTime.stop(); #endif // PRODUCT return number_of_marked_CodeBlobs;
src/share/vm/code/codeCache.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File