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

ThreadMXBean::getThreadAllocatedBytes() can be quicker for self thread

XMLWordPrintable

    • Icon: CSR CSR
    • Resolution: Withdrawn
    • Icon: P4 P4
    • 11-pool
    • core-svc
    • None
    • source
    • minimal
    • Hide
      Minimal compatibility risk since it adds a method (getCurrentThreadAllocatedBytes) to com.sun.management.ThreadMXBean and affects no existing binaries. Because it's an addition to com.sun.management, there is no support requirement for other JDK implementations.
      Show
      Minimal compatibility risk since it adds a method (getCurrentThreadAllocatedBytes) to com.sun.management.ThreadMXBean and affects no existing binaries. Because it's an addition to com.sun.management, there is no support requirement for other JDK implementations.
    • Java API

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

      Summary

      Add com.sun.management.ThreadMXBean::getCurrentThreadAllocatedBytes.

      Problem

      com.sun.management.ThreadMXBean includes getThreadAllocatedBytes in two versions, one which takes a thread_id and another which takes an array of thread_ids.

      getThreadAllocatedBytes(long id);
      getThreadAllocatedBytes(long[] ids);</code></pre>
      
      <p>It also includes versions of getThreadCpuTime and getThreadUserTime that take an array of thread_ids.</p>
      
      <pre class="prettyprint" ><code>getThreadCpuTime(long[] ids);
      getThreadUserTime(long[] ids);

      java.lang.thread.ThreadMXBean defines single thread_id and current thread versions of these.

      getThreadCpuTime(long id);
      getThreadUserTime(long id);
      getCurrentThreadCpuTime();
      getCurrentThreadUserTime();

      Three versions of Cpu and User time are thus available from com.sun.management.ThreadMXBean: current thread, single thread_id, and an array of thread_ids. Only two versions of AllocatedBytes are currently available: single thread_id and an array of thread_ids.

      The current thread versions of Cpu and User time are optimized to by avoiding checks needed by the versions that take thread_id(s). getCurrentThreadAllocatedBytes can also be so optimized, is useful for applications that monitor themselves, and rounds out the set of AllocatedBytes methods. As with the other AllocatedBytes methods, getCurrentThreadAllocatedBytes is a method on com.sun.management.ThreadMXBean rather than java.lang.thread.ThreadMXBean in order to avoid requiring all implementations to support it.

      Solution

      Add com.sun.management.ThreadMXBean::getCurrentThreadAllocatedBytes.

      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>
       *
       * @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 long getCurrentThreadAllocatedBytes();

            phh Paul Hohensee
            dcubed Daniel Daugherty
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: