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

getCurrentThreadAllocatedBytes default implementation s/b getThreadAllocatedBytes

    XMLWordPrintable

Details

    • CSR
    • Resolution: Approved
    • P4
    • 14
    • core-svc
    • None
    • behavioral
    • minimal
    • 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.
    • Java API
    • 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

                phh Paul Hohensee
                phh Paul Hohensee
                David Holmes, Mandy Chung
                Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                  Created:
                  Updated:
                  Resolved: