Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8198331

[Lilliput] Remove mark word from objects

XMLWordPrintable

    • Icon: JEP JEP
    • Resolution: Withdrawn
    • Icon: P4 P4
    • None
    • hotspot
    • None
    • Feature
    • Open
    • JDK

      Investigate downsizing average object size by removing (or downsizing) the mark word from the oopDesc layout.

      DRAFT DRAFT DRAFT

      The 64-bit mark word can be used for several purposes:

      • GC state during a GC, such as a forwarding pointer
      • lock state (not during a GC), including unlocked, thin-locked, biased, and inflated monitor
      • object annotations by GC (a few "age" bits)
      • storage for the System.identityHashCode
      • a tag to distinguish object instances from value instances

      There are well-known alternative representations for all of these mechanisms which do not use the 64-bit object header.

      For example:

      • GC state can be stored in a side array
      • lock state can be stored in a side array and/or in a word preceding the object
      • age annotations and "value tags" can be inserted into other "waste" space of the object, such as the high bits of the klass field (if it is present)
      • hash codes can be stored in a word before the object, and/or be derived from the object's address in new-space

      If we could remove mark words from all objects, the density of the heap would go up by a significant factor, basically (1+8/S), where S is the average object size; since S is typically something like 30-50 bytes (including arrays, which may be quite large), the overhead of mark words can often be a double-digit percentage.

            rkennke Roman Kennke
            jrose John Rose
            John Rose John Rose
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

              Created:
              Updated:
              Resolved: