summaryrefslogtreecommitdiff
path: root/vm
diff options
context:
space:
mode:
authorAndrew John Hughes <gnu_andrew@member.fsf.org>2006-07-01 11:37:57 +0000
committerAndrew John Hughes <gnu_andrew@member.fsf.org>2006-07-01 11:37:57 +0000
commit1ecc92ee201bc12786c458470480c49ff6375d4c (patch)
treede0cbf701df2c4712385ef454f5db36db1802b92 /vm
parent1dcb1d0057fb785bab986cd7a20391349bf60969 (diff)
downloadclasspath-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.java207
-rw-r--r--vm/reference/java/lang/management/VMThreadInfo.java159
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);
-}