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

getCurrentThreadAllocatedBytes default implementation s/b getThreadAllocatedBytes

    Details

    • Type: CSR
    • Status: Closed
    • Priority: P4
    • Resolution: Approved
    • Fix Version/s: 14
    • Component/s: core-svc
    • Labels:
      None
    • Subcomponent:
    • Compatibility Kind:
      behavioral
    • Compatibility Risk:
      minimal
    • Compatibility Risk Description:
      Behavior will match the JDK implementation of c.s.m.ThreadMXBean, which currently throws UOE. If that changes, or if a different class implements c.s.m.ThreadMXBean and overrides getCurrentThreadAllocatedBytes' behavior, behavior may change.
    • Interface Kind:
      Java API
    • Scope:
      JDK

      Description

      Summary

      To match its abstract specification, change the default implementation of com.sun.management.ThreadMXBean.getCurrentThreadAllocatedBytes to return the value of getThreadAllocatedBytes(Thread.currentThread().getId()).

      Problem

      The existing default implementation of com.sun.management.ThreadMXBean.getCurrentThreadAllocatedBytes is to throw UnsupportedOperationException, which is permitted but doesn't match the abstract specification of the method.

      Solution

      Change the default implementation of com.sun.management.ThreadMXBean.getCurrentThreadAllocatedBytes to return the value of getThreadAllocatedBytes(Thread.currentThread().getId()).

      Remove the @implSpec portion of the Javadoc that described the throwing of the exception.

      Specification

      /**
       * Returns an approximation of the total amount of memory, in bytes,
       * allocated in heap memory for the current thread.
       * The returned value is an approximation because some Java virtual machine
       * implementations may use object allocation mechanisms that result in a
       * delay between the time an object is allocated and the time its size is
       * recorded.
       *
       * <p>
       * This is a convenience method for local management use and is
       * equivalent to calling:
       * <blockquote><pre>
       *   {@link #getThreadAllocatedBytes getThreadAllocatedBytes}(Thread.currentThread().getId());
       * </pre></blockquote>
       *
      -* @implSpec The default implementation throws
      -* {@code UnsupportedOperationException}.
      -*
       * @return an approximation of the total memory allocated, in bytes, in
       * heap memory for the current thread
       * if thread memory allocation measurement is enabled;
       * {@code -1} otherwise.
       *
       * @throws java.lang.UnsupportedOperationException if the Java virtual
       *         machine implementation does not support thread memory allocation
       *         measurement.
       *
       * @see #isThreadAllocatedMemorySupported
       * @see #isThreadAllocatedMemoryEnabled
       * @see #setThreadAllocatedMemoryEnabled
       * @since 14
       */
      public default long getCurrentThreadAllocatedBytes() {
          return getThreadAllocatedBytes(Thread.currentThread().getId());
      }

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                phh Paul Hohensee
                Reporter:
                phh Paul Hohensee
                Reviewed By:
                David Holmes, Mandy Chung
              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: