-
CSR
-
Resolution: Approved
-
P4
-
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
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8249101 | 11.0.9-oracle | Daniil Titov | P4 | Closed | Approved | |
JDK-8247810 | 11.0.9 | Paul Hohensee | P4 | Closed | Approved | |
JDK-8247814 | openjdk8u282 | Paul Hohensee | P4 | Closed | Approved |
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());
}
- backported by
-
JDK-8247810 getCurrentThreadAllocatedBytes default implementation s/b getThreadAllocatedBytes
- Closed
-
JDK-8247814 getCurrentThreadAllocatedBytes default implementation s/b getThreadAllocatedBytes
- Closed
-
JDK-8249101 [REDO] JDK-8207266 ThreadMXBean::getThreadAllocatedBytes() can be quicker for self thread
- Closed
- csr of
-
JDK-8231968 getCurrentThreadAllocatedBytes default implementation s/b getThreadAllocatedBytes
- Resolved
- relates to
-
JDK-8231374 [REDO] JDK-8207266 ThreadMXBean::getThreadAllocatedBytes() can be quicker for self thread
- Closed