/* |
|
* Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved. |
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
* |
|
* This code is free software; you can redistribute it and/or modify it |
|
* under the terms of the GNU General Public License version 2 only, as |
|
* published by the Free Software Foundation. Oracle designates this |
|
* particular file as subject to the "Classpath" exception as provided |
|
* by Oracle in the LICENSE file that accompanied this code. |
|
* |
|
* This code is distributed in the hope that it will be useful, but WITHOUT |
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
* version 2 for more details (a copy is included in the LICENSE file that |
|
* accompanied this code). |
|
* |
|
* You should have received a copy of the GNU General Public License version |
|
* 2 along with this work; if not, write to the Free Software Foundation, |
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
* |
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
* or visit www.oracle.com if you need additional information or have any |
|
* questions. |
|
*/ |
|
package com.sun.management; |
|
import java.lang.management.ThreadInfo; |
|
import java.util.Map; |
|
/** |
|
* Platform-specific management interface for the thread system |
|
* of the Java virtual machine. |
|
* <p> |
|
* This platform extension is only available to a thread |
|
* implementation that supports this extension. |
|
* |
|
* @author Paul Hohensee |
|
* @since 6u25 |
|
*/ |
|
@jdk.Exported |
|
public interface ThreadMXBean extends java.lang.management.ThreadMXBean { |
|
/** |
|
* Returns the total CPU time for each thread whose ID is |
|
* in the input array {@code ids} in nanoseconds. |
|
* The returned values are of nanoseconds precision but |
|
* not necessarily nanoseconds accuracy. |
|
* <p> |
|
* This method is equivalent to calling the |
|
* {@link ThreadMXBean#getThreadCpuTime(long)} |
|
* method for each thread ID in the input array {@code ids} and setting the |
|
* returned value in the corresponding element of the returned array. |
|
* |
|
* @param ids an array of thread IDs. |
|
* @return an array of long values, each of which is the amount of CPU |
|
* time the thread whose ID is in the corresponding element of the input |
|
* array of IDs has used, |
|
* if the thread of a specified ID exists, the thread is alive, |
|
* and CPU time measurement is enabled; |
|
* {@code -1} otherwise. |
|
* |
|
* @throws NullPointerException if {@code ids} is {@code null} |
|
* @throws IllegalArgumentException if any element in the input array |
|
* {@code ids} is {@code <=} {@code 0}. |
|
* @throws UnsupportedOperationException if the Java |
|
* virtual machine implementation does not support CPU time |
|
* measurement. |
|
* |
|
* @see ThreadMXBean#getThreadCpuTime(long) |
|
* @see #getThreadUserTime |
|
* @see ThreadMXBean#isThreadCpuTimeSupported |
|
* @see ThreadMXBean#isThreadCpuTimeEnabled |
|
* @see ThreadMXBean#setThreadCpuTimeEnabled |
|
*/ |
|
public long[] getThreadCpuTime(long[] ids); |
|
/** |
|
* Returns the CPU time that each thread whose ID is in the input array |
|
* {@code ids} has executed in user mode in nanoseconds. |
|
* The returned values are of nanoseconds precision but |
|
* not necessarily nanoseconds accuracy. |
|
* <p> |
|
* This method is equivalent to calling the |
|
* {@link ThreadMXBean#getThreadUserTime(long)} |
|
* method for each thread ID in the input array {@code ids} and setting the |
|
* returned value in the corresponding element of the returned array. |
|
* |
|
* @param ids an array of thread IDs. |
|
* @return an array of long values, each of which is the amount of user |
|
* mode CPU time the thread whose ID is in the corresponding element of |
|
* the input array of IDs has used, |
|
* if the thread of a specified ID exists, the thread is alive, |
|
* and CPU time measurement is enabled; |
|
* {@code -1} otherwise. |
|
* |
|
* @throws NullPointerException if {@code ids} is {@code null} |
|
* @throws IllegalArgumentException if any element in the input array |
|
* {@code ids} is {@code <=} {@code 0}. |
|
* @throws UnsupportedOperationException if the Java |
|
* virtual machine implementation does not support CPU time |
|
* measurement. |
|
* |
|
* @see ThreadMXBean#getThreadUserTime(long) |
|
* @see #getThreadCpuTime |
|
* @see ThreadMXBean#isThreadCpuTimeSupported |
|
* @see ThreadMXBean#isThreadCpuTimeEnabled |
|
* @see ThreadMXBean#setThreadCpuTimeEnabled |
|
*/ |
|
public long[] getThreadUserTime(long[] ids); |
|
/** |
|
* 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 UnsupportedOperationException if the Java virtual |
|
* machine implementation does not support thread memory allocation |
|
* measurement. |
|
* |
|
* @see #isThreadAllocatedMemorySupported |
|
* @see #isThreadAllocatedMemoryEnabled |
|
* @see #setThreadAllocatedMemoryEnabled |
|
* |
|
* @since 8u282 |
|
*/ |
|
public default long getCurrentThreadAllocatedBytes() { |
|
return getThreadAllocatedBytes(Thread.currentThread().getId()); |
|
} |
|
/** |
|
* Returns an approximation of the total amount of memory, in bytes, |
|
* allocated in heap memory for the thread with the specified ID. |
|
* 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> |
|
* If the thread with the specified ID is not alive or does not exist, |
|
* this method returns {@code -1}. If thread memory allocation measurement |
|
* is disabled, this method returns {@code -1}. |
|
* A thread is alive if it has been started and has not yet died. |
|
* <p> |
|
* If thread memory allocation measurement is enabled after the thread has |
|
* started, the Java virtual machine implementation may choose any time up |
|
* to and including the time that the capability is enabled as the point |
|
* where thread memory allocation measurement starts. |
|
* |
|
* @param id the thread ID of a thread |
|
* @return an approximation of the total memory allocated, in bytes, in |
|
* heap memory for the thread with the specified ID |
|
* if the thread with the specified ID exists, the thread is alive, |
|
* and thread memory allocation measurement is enabled; |
|
* {@code -1} otherwise. |
|
* |
|
* @throws IllegalArgumentException if {@code id} {@code <=} {@code 0}. |
|
* @throws UnsupportedOperationException if the Java virtual |
|
* machine implementation does not support thread memory allocation |
|
* measurement. |
|
* |
|
* @see #isThreadAllocatedMemorySupported |
|
* @see #isThreadAllocatedMemoryEnabled |
|
* @see #setThreadAllocatedMemoryEnabled |
|
*/ |
|
public long getThreadAllocatedBytes(long id); |
|
/** |
|
* Returns an approximation of the total amount of memory, in bytes, |
|
* allocated in heap memory for each thread whose ID is in the input |
|
* array {@code ids}. |
|
* The returned values are approximations 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 method is equivalent to calling the |
|
* {@link #getThreadAllocatedBytes(long)} |
|
* method for each thread ID in the input array {@code ids} and setting the |
|
* returned value in the corresponding element of the returned array. |
|
* |
|
* @param ids an array of thread IDs. |
|
* @return an array of long values, each of which is an approximation of |
|
* the total memory allocated, in bytes, in heap memory for the thread |
|
* whose ID is in the corresponding element of the input array of IDs. |
|
* |
|
* @throws NullPointerException if {@code ids} is {@code null} |
|
* @throws IllegalArgumentException if any element in the input array |
|
* {@code ids} is {@code <=} {@code 0}. |
|
* @throws UnsupportedOperationException if the Java virtual |
|
* machine implementation does not support thread memory allocation |
|
* measurement. |
|
* |
|
* @see #getThreadAllocatedBytes(long) |
|
* @see #isThreadAllocatedMemorySupported |
|
* @see #isThreadAllocatedMemoryEnabled |
|
* @see #setThreadAllocatedMemoryEnabled |
|
*/ |
|
public long[] getThreadAllocatedBytes(long[] ids); |
|
/** |
|
* Tests if the Java virtual machine implementation supports thread memory |
|
* allocation measurement. |
|
* |
|
* @return |
|
* {@code true} |
|
* if the Java virtual machine implementation supports thread memory |
|
* allocation measurement; |
|
* {@code false} otherwise. |
|
*/ |
|
public boolean isThreadAllocatedMemorySupported(); |
|
/** |
|
* Tests if thread memory allocation measurement is enabled. |
|
* |
|
* @return {@code true} if thread memory allocation measurement is enabled; |
|
* {@code false} otherwise. |
|
* |
|
* @throws UnsupportedOperationException if the Java virtual |
|
* machine does not support thread memory allocation measurement. |
|
* |
|
* @see #isThreadAllocatedMemorySupported |
|
*/ |
|
public boolean isThreadAllocatedMemoryEnabled(); |
|
/** |
|
* Enables or disables thread memory allocation measurement. The default |
|
* is platform dependent. |
|
* |
|
* @param enable {@code true} to enable; |
|
* {@code false} to disable. |
|
* |
|
* @throws UnsupportedOperationException if the Java virtual |
|
* machine does not support thread memory allocation measurement. |
|
* |
|
* @throws SecurityException if a security manager |
|
* exists and the caller does not have |
|
* ManagementPermission("control"). |
|
* |
|
* @see #isThreadAllocatedMemorySupported |
|
*/ |
|
public void setThreadAllocatedMemoryEnabled(boolean enable); |
|
/** |
|
* Returns the thread info for each thread whose ID |
|
* is in the input array <tt>ids</tt>, |
|
* with stack trace of the specified maximum number of elements |
|
* and synchronization information. |
|
* If <tt>maxDepth == 0</tt>, no stack trace of the thread |
|
* will be dumped. |
|
* |
|
* <p> |
|
* This method obtains a snapshot of the thread information |
|
* for each thread including: |
|
* <ul> |
|
* <li>stack trace of the specified maximum number of elements,</li> |
|
* <li>the object monitors currently locked by the thread |
|
* if <tt>lockedMonitors</tt> is <tt>true</tt>, and</li> |
|
* <li>the <a href="{@docRoot}/../api/java/lang/management/LockInfo.html#OwnableSynchronizer"> |
|
* ownable synchronizers</a> currently locked by the thread |
|
* if <tt>lockedSynchronizers</tt> is <tt>true</tt>.</li> |
|
* </ul> |
|
* <p> |
|
* This method returns an array of the <tt>ThreadInfo</tt> objects, |
|
* each is the thread information about the thread with the same index |
|
* as in the <tt>ids</tt> array. |
|
* If a thread of the given ID is not alive or does not exist, |
|
* <tt>null</tt> will be set in the corresponding element |
|
* in the returned array. A thread is alive if |
|
* it has been started and has not yet died. |
|
* <p> |
|
* If a thread does not lock any object monitor or <tt>lockedMonitors</tt> |
|
* is <tt>false</tt>, the returned <tt>ThreadInfo</tt> object will have an |
|
* empty <tt>MonitorInfo</tt> array. Similarly, if a thread does not |
|
* lock any synchronizer or <tt>lockedSynchronizers</tt> is <tt>false</tt>, |
|
* the returned <tt>ThreadInfo</tt> object |
|
* will have an empty <tt>LockInfo</tt> array. |
|
* |
|
* <p> |
|
* When both <tt>lockedMonitors</tt> and <tt>lockedSynchronizers</tt> |
|
* parameters are <tt>false</tt>, it is equivalent to calling: |
|
* <blockquote><pre> |
|
* {@link #getThreadInfo(long[], int) getThreadInfo(ids, maxDepth)} |
|
* </pre></blockquote> |
|
* |
|
* <p> |
|
* This method is designed for troubleshooting use, but not for |
|
* synchronization control. It might be an expensive operation. |
|
* |
|
* <p> |
|
* <b>MBeanServer access</b>:<br> |
|
* The mapped type of <tt>ThreadInfo</tt> is |
|
* <tt>CompositeData</tt> with attributes as specified in the |
|
* {@link ThreadInfo#from ThreadInfo.from} method. |
|
* |
|
* @implSpec The default implementation throws |
|
* <tt>UnsupportedOperationException</tt>. |
|
* |
|
* @param ids an array of thread IDs. |
|
* @param lockedMonitors if <tt>true</tt>, retrieves all locked monitors. |
|
* @param lockedSynchronizers if <tt>true</tt>, retrieves all locked |
|
* ownable synchronizers. |
|
* @param maxDepth indicates the maximum number of |
|
* {@link StackTraceElement} to be retrieved from the stack trace. |
|
* |
|
* @return an array of the {@link ThreadInfo} objects, each containing |
|
* information about a thread whose ID is in the corresponding |
|
* element of the input array of IDs. |
|
* |
|
* @throws IllegalArgumentException if <tt>maxDepth</tt> is negative. |
|
* @throws java.lang.SecurityException if a security manager |
|
* exists and the caller does not have |
|
* ManagementPermission("monitor"). |
|
* @throws java.lang.UnsupportedOperationException |
|
* <ul> |
|
* <li>if <tt>lockedMonitors</tt> is <tt>true</tt> but |
|
* the Java virtual machine does not support monitoring |
|
* of {@linkplain #isObjectMonitorUsageSupported |
|
* object monitor usage}; or</li> |
|
* <li>if <tt>lockedSynchronizers</tt> is <tt>true</tt> but |
|
* the Java virtual machine does not support monitoring |
|
* of {@linkplain #isSynchronizerUsageSupported |
|
* ownable synchronizer usage}.</li> |
|
* </ul> |
|
* |
|
* @see #isObjectMonitorUsageSupported |
|
* @see #isSynchronizerUsageSupported |
|
* |
|
* @since 8u282 |
|
*/ |
|
public default ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, |
|
boolean lockedSynchronizers, int maxDepth) { |
|
throw new UnsupportedOperationException(); |
|
} |
|
/** |
|
* Returns the thread info for all live threads |
|
* with stack trace of the specified maximum number of elements |
|
* and synchronization information. |
|
* if <tt>maxDepth == 0</tt>, no stack trace of the thread |
|
* will be dumped. |
|
* Some threads included in the returned array |
|
* may have been terminated when this method returns. |
|
* |
|
* <p> |
|
* This method returns an array of {@link ThreadInfo} objects |
|
* as specified in the {@link #getThreadInfo(long[], boolean, boolean, int)} |
|
* method. |
|
* |
|
* @implSpec The default implementation throws |
|
* <tt>UnsupportedOperationException</tt>. |
|
* |
|
* @param lockedMonitors if <tt>true</tt>, dump all locked monitors. |
|
* @param lockedSynchronizers if <tt>true</tt>, dump all locked |
|
* ownable synchronizers. |
|
* @param maxDepth indicates the maximum number of |
|
* {@link StackTraceElement} to be retrieved from the stack trace. |
|
* |
|
* @return an array of {@link ThreadInfo} for all live threads. |
|
* |
|
* @throws IllegalArgumentException if <tt>maxDepth</tt> is negative. |
|
* @throws java.lang.SecurityException if a security manager |
|
* exists and the caller does not have |
|
* ManagementPermission("monitor"). |
|
* @throws java.lang.UnsupportedOperationException |
|
* <ul> |
|
* <li>if <tt>lockedMonitors</tt> is <tt>true</tt> but |
|
* the Java virtual machine does not support monitoring |
|
* of {@linkplain #isObjectMonitorUsageSupported |
|
* object monitor usage}; or</li> |
|
* <li>if <tt>lockedSynchronizers</tt> is <tt>true</tt> but |
|
* the Java virtual machine does not support monitoring |
|
* of {@linkplain #isSynchronizerUsageSupported |
|
* ownable synchronizer usage}.</li> |
|
* </ul> |
|
* |
|
* @see #isObjectMonitorUsageSupported |
|
* @see #isSynchronizerUsageSupported |
|
* |
|
* @since 8u282 |
|
*/ |
|
public default ThreadInfo[] dumpAllThreads(boolean lockedMonitors, |
|
boolean lockedSynchronizers, int maxDepth) { |
|
throw new UnsupportedOperationException(); |
|
} |
|
} |