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

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

XMLWordPrintable

    • Icon: CSR CSR
    • Resolution: Approved
    • Icon: P4 P4
    • 14
    • core-svc
    • None
    • minimal
    • Adds a method with well-understood semantics and leaves existing method semantics unchanged. Existing programs will continue to compile and execute as before.
    • Java API
    • JDK

        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
              Mandy Chung (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: