JDK-8220512 : Deoptimize redefinition functions that have dirty ICs
  • Type: Bug
  • Component: hotspot
  • Sub-Component: jvmti
  • Affected Version: 13
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2019-03-12
  • Updated: 2019-03-21
  • Resolved: 2019-03-15
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 13
13 b13Fixed
Related Reports
Relates :  
Description
Use metadata section in nmethod to decide when to deoptimize nmethods after redefinition.  This walk includes the Method* in evol_method dependencies because the Method* is added there.

This might deoptimize more things but then we don't have to call clear_inline_caches.  [~eosterlund] is trying to remove that.

I don't think this can remove evol_method dependencies.  We still have to assert_evol_method to get the Method* in the metadata section.  It also seems to be used to check_dependencies:
    // The point of the whole exercise:  Is this dep still OK?
    Klass* check_dependency() {
      Klass* result = check_klass_dependency(NULL);
      if (result != NULL)  return result;
      return check_call_site_dependency(NULL);
    }

check_klass_dependency has a case for evol_method dependencies.

Also make metadata_do take a closure.