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

getCurrentThreadAllocatedBytes default implementation s/b getThreadAllocatedBytes

    XMLWordPrintable

Details

    • CSR
    • Resolution: Approved
    • P4
    • 11.0.9-oracle
    • 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

    Description

      Original CSR: https://bugs.openjdk.java.net/browse/JDK-8232072

      There is a pair of original CSRs that need to be backported together:

      For CSR 1 the backport is https://bugs.openjdk.java.net/browse/JDK-8249101

      For CSR 2 the backport is this CSR.

      The only difference from the original CSR https://bugs.openjdk.java.net/browse/JDK-8232072 is that the version tag for method getCurrentThreadAllocatedBytes was changed from "@since 14" and "@since 11.0.9".

      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
       */
      public default long getCurrentThreadAllocatedBytes() {
          return getThreadAllocatedBytes(Thread.currentThread().getId());
      }

      Attachments

        Issue Links

          Activity

            People

              dtitov Daniil Titov (Inactive)
              phh Paul Hohensee
              Alex Menkov, Chris Plummer
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: