diff options
author | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2006-07-01 11:37:57 +0000 |
---|---|---|
committer | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2006-07-01 11:37:57 +0000 |
commit | 1ecc92ee201bc12786c458470480c49ff6375d4c (patch) | |
tree | de0cbf701df2c4712385ef454f5db36db1802b92 /vm | |
parent | 1dcb1d0057fb785bab986cd7a20391349bf60969 (diff) | |
download | classpath-1ecc92ee201bc12786c458470480c49ff6375d4c.tar.gz |
2006-07-01 Andrew John Hughes <gnu_andrew@member.fsf.org>
* gnu/java/lang/management/BeanImpl.java:
New superclass for all bean implementations.
* gnu/java/lang/management/ClassLoadingMXBeanImpl.java:
Extend BeanImpl and call permission code there.
* gnu/java/lang/management/OperatingSystemMXBeanImpl.java:
Extend BeanImpl.
* gnu/java/lang/management/RuntimeMXBeanImpl.java:
Extend BeanImpl and call permission code there.
* gnu/java/lang/management/ThreadMXBeanImpl.java:
New file.
* java/lang/management/ManagementFactory.java:
(getThreadMXBean()): Implemented.
* java/lang/management/ThreadInfo.java:
(ThreadInfo(Thread,int)): Replaced...
(ThreadInfo(Thread,long,long,Object,Thread,long,long,
boolean, boolean, StackTraceElement[])): with this.
(getBlockedCount()): Refactored to use local variables.
(getBlockedTime()): Likewise.
(getLockName()): Likewise.
(getLockOwnerId()): Likewise.
(getLockOwnerName()): Likewise.
(getStackTrace()): Likewise.
(getWaitedCount()): Likewise.
(getWaitedTime()): Likewise.
(isInNative()): Likewise.
(isSuspended()): Likewise.
(toString()): Changed to use new local variables.
* java/lang/management/ThreadMXBean.java:
(getThreadInfo(long, int)): Corrected documentation.
(getThreadInfo(long[], int)): Likewise.
* vm/reference/gnu/java/lang/management/VMThreadMXBeanImpl.java:
New file.
* vm/reference/java/lang/management/VMThreadInfo.java:
Removed.
Diffstat (limited to 'vm')
-rw-r--r-- | vm/reference/gnu/java/lang/management/VMThreadMXBeanImpl.java | 207 | ||||
-rw-r--r-- | vm/reference/java/lang/management/VMThreadInfo.java | 159 |
2 files changed, 207 insertions, 159 deletions
diff --git a/vm/reference/gnu/java/lang/management/VMThreadMXBeanImpl.java b/vm/reference/gnu/java/lang/management/VMThreadMXBeanImpl.java new file mode 100644 index 000000000..c5bcb6310 --- /dev/null +++ b/vm/reference/gnu/java/lang/management/VMThreadMXBeanImpl.java @@ -0,0 +1,207 @@ +/* VMThreadMXBeanImpl.java - VM impl. of a thread bean + Copyright (C) 2006 Free Software Foundation + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package gnu.java.lang.management; + +import java.lang.management.ThreadInfo; + +/** + * Provides access to information about the threads + * of the virtual machine. An instance of this bean is + * obtained by calling + * {@link ManagementFactory#getThreadMXBean()}. + * See {@link java.lang.management.ThreadMXBean} for + * full documentation. + * + * @author Andrew John Hughes (gnu_andrew@member.fsf.org) + * @since 1.5 + */ +final class VMThreadMXBeanImpl +{ + + /** + * Cache of how many threads were found. + */ + private static int filled; + + /** + * Returns the ids of cycles of deadlocked threads, occurring + * due to monitor ownership. + * + * @return the ids of the deadlocked threads. + */ + static native long[] findMonitorDeadlockedThreads(); + + /* This is the same as in Thread.getAllStackTraces() */ + static Thread[] getAllThreads() + { + ThreadGroup group = Thread.currentThread().getThreadGroup(); + while (group.getParent() != null) + group = group.getParent(); + int arraySize = group.activeCount(); + Thread[] threadList = new Thread[arraySize]; + filled = group.enumerate(threadList); + while (filled == arraySize) + { + arraySize *= 2; + threadList = new Thread[arraySize]; + filled = group.enumerate(threadList); + } + return threadList; + } + + /** + * Returns the id of all live threads at the time of execution. + * + * @return the live thread ids. + */ + static long[] getAllThreadIds() + { + Thread[] threadList = getAllThreads(); + long[] ids = new long[filled]; + for (int a = 0; a < filled; ++a) + ids[a] = threadList[a].getId(); + return ids; + } + + /** + * Returns the number of nanoseconds of CPU time + * the current thread has used in total. This is + * only called if this feature is enabled and + * supported. + * + * @return the nanoseconds of CPU time used by + * the current thread. + */ + static native long getCurrentThreadCpuTime(); + + /** + * Returns the number of nanoseconds of user time + * the current thread has used in total. This is + * only called if this feature is enabled and + * supported. + * + * @return the nanoseconds of user time used by + * the current thread. + */ + static native long getCurrentThreadUserTime(); + + /** + * Returns the number of live daemon threads. + * + * @return the number of live daemon threads. + */ + static int getDaemonThreadCount() + { + Thread[] threadList = getAllThreads(); + int daemonCount = 0; + for (int a = 0; a < filled; ++a) + { + if (threadList[a].isDaemon()) + ++daemonCount; + } + return daemonCount; + } + + /** + * Returns the current peak number of live threads. + * + * @return the peak number of live threads. + */ + static native int getPeakThreadCount(); + + /** + * Returns the number of live threads. + * + * @return the number of live threads. + */ + static int getThreadCount() + { + getAllThreads(); + return filled; + } + + /** + * Returns the number of nanoseconds of CPU time + * the specified thread has used in total. This is + * only called if this feature is enabled and + * supported. + * + * @param id the thread to obtain statistics on. + * @return the nanoseconds of CPU time used by + * the thread. + */ + static native long getThreadCpuTime(long id); + + /** + * Returns the {@link java.lang.management.ThreadInfo} + * which corresponds to the specified id. + * + * @param id the id of the thread. + * @param maxDepth the depth of the stack trace. + * @return the corresponding <code>ThreadInfo</code>. + */ + static native ThreadInfo getThreadInfoForId(long id, int maxDepth); + + /** + * Returns the number of nanoseconds of user time + * the specified thread has used in total. This is + * only called if this feature is enabled and + * supported. + * + * @param id the thread to obtain statistics on. + * @return the nanoseconds of user time used by + * the thread. + */ + static native long getThreadUserTime(long id); + + /** + * Returns the total number of threads that have + * been started over the lifetime of the virtual + * machine. + * + * @return the total number of threads started. + */ + static native long getTotalStartedThreadCount(); + + /** + * Resets the peak thread count to the current + * number of live threads. + */ + static native void resetPeakThreadCount(); + +} diff --git a/vm/reference/java/lang/management/VMThreadInfo.java b/vm/reference/java/lang/management/VMThreadInfo.java deleted file mode 100644 index 162fe6794..000000000 --- a/vm/reference/java/lang/management/VMThreadInfo.java +++ /dev/null @@ -1,159 +0,0 @@ -/* VMThreadInfo.java - Information on a thread - Copyright (C) 2006 Free Software Foundation - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath 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 for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 USA. - -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from -or based on this library. If you modify this library, you may extend -this exception to your version of the library, but you are not -obligated to do so. If you do not wish to do so, delete this -exception statement from your version. */ - -package java.lang.management; - -/** - * Provides low-level information about a thread. - * - * @author Andrew John Hughes (gnu_andrew@member.fsf.org) - * @since 1.5 - * @see java.lang.management.ThreadInfo - */ -final class VMThreadInfo -{ - - /** - * Return the number of times the specified thread - * has been in the {@link java.lang.Thread.State#BLOCKED} - * state. - * - * @param thread the thread to return statistics on. - * @return the number of times the thread has been blocked. - */ - static native long getBlockedCount(Thread thread); - - /** - * Returns the accumulated number of milliseconds the - * specified thread has spent in the - * {@link java.lang.Thread.State#BLOCKED} state. This - * method is only called if thread contention monitoring - * is both supported and enabled. - * - * @param thread the thread to return statistics on. - * @return the accumulated number of milliseconds the - * thread has been blocked for. - */ - static native long getBlockedTime(Thread thread); - - /** - * Returns the monitor lock the specified thread is - * waiting for. This is only called when the thread - * is in the {@link java.lang.Thread.State#BLOCKED} - * state. - * - * @param thread the thread to return statistics on. - * @return the monitor lock the thread is waiting for. - */ - static native Object getLock(Thread thread); - - /** - * Returns the thread which currently owns the monitor - * lock the specified thread is waiting for. This is - * only called when the thread is in the - * {@link java.lang.Thread.State#BLOCKED} state. It - * may return <code>null</code> if the lock is not held - * by another thread. - * - * @param thread the thread to return statistics on. - * @return the thread which owns the monitor lock the - * thread is waiting for, or <code>null</code> - * if it doesn't have an owner. - */ - static native Thread getLockOwner(Thread thread); - - /** - * Return the number of times the specified thread - * has been in the {@link java.lang.Thread.State#WAITING} - * or {@link java.lang.Thread.State#TIMED_WAITING} states. - * - * @param thread the thread to return statistics on. - * @return the number of times the thread has been in - * waiting state. - */ - static native long getWaitedCount(Thread thread); - - /** - * Returns the accumulated number of milliseconds the - * specified thread has spent in either the - * {@link java.lang.Thread.State#WAITING} or - * {@link java.lang.Thread.State#TIMED_WAITING} states. - * This method is only called if thread contention - * monitoring is both supported and enabled. - * - * @param thread the thread to return statistics on. - * @return the accumulated number of milliseconds the - * thread has been in a waiting state for. - */ - static native long getWaitedTime(Thread thread); - - /** - * Returns true if the specified thread is in a native - * method. - * - * @param thread the thread to return statistics on. - * @return true if the thread is in a native method, false - * otherwise. - */ - static native boolean isInNative(Thread thread); - - /** - * Returns true if the specified thread is suspended. - * - * @param thread the thread to return statistics on. - * @return true if the thread is suspended, false otherwise. - */ - static native boolean isSuspended(Thread thread); - - /** - * Returns a stack trace for the specified thread of - * the supplied depth. If the depth is - * <code>Integer.MAX_VALUE</code>, then the returned - * depth is equal to the full stack trace available. - * The depth will be greater than zero, due to - * filtering in methods prior to this call. - * - * @param thread the thread whose stack trace should - * be returned. - * @param maxDepth the maximum depth of the trace. - * This will be greater than zero. - * <code>Integer.MAX_VALUE</code> - * represents the full trace. - */ - static native StackTraceElement[] getStackTrace(Thread thread, - int maxDepth); -} |