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

      Backports

        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: