Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Correct diagrams in "Hash Codes and Object Header Interference" section.

...

    T-hash                  ObjectMonitor              T-deflate
    ----------------------  +-----------------------+  --------------------------------------
    save_om_ptr() {         | owner=DEFLATER_MARKER |  cmpxchg(DEFLATER_MARKER, &owner, NULL)
      atomic inc ref_count :   | count=-max_jint      0        |  if (waiters != 0 or ref_count != 0) {
                                 atomic inc ref_count  | ref_count=1           |  }
                            +-----------------------+  prev = cmpxchg(-max_jint, &count, 0)

...

    T-hash                    ObjectMonitor              T-deflate
    ------------------------  +-----------------------+  ----------------------------------------
    save_om_ptr() {           | owner=NULL            |  cmpxchg(DEFLATER_MARKER, &owner, NULL)
      atomic inc ref_count    | count=0               |  if (waiters != 0 or ref_count != 0) {
      if (owner ==            | ref_count=1           |    cmpxchg(NULL, &owner, DEFLATER_MARKER)
          DEFLATER_MARKER) {  +-----------------------+    return false to cause a retry
      }                                                  if (prev == 0 &&}
      if (object no longer                                  longer                               ownerprev == DEFLATER_MARKER) {cmpxchg(-max_jint, &count, 0)
          has a monitor or                                 restore headeror
          is a different                                   finish the deflationdifferent
          monitor) {                                     }
        atomic dec ref_count
        return false to
          cause a retry
      }
      save om_ptr in the
        ObjectMonitorHandle
    }

...