package org.gridkit.jvmtool.stacktrace;
import java.lang.management.ThreadMXBean;
import javax.management.JMX;
import javax.management.MBeanServerConnection;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
/**
* Additional methods available in modern JVMs.
*
* @author Alexey Ragozin (alexey.ragozin@gmail.com)
*/
public interface ThreadMXBeanEx extends java.lang.management.ThreadMXBean {
public static final ObjectName THREADING_MBEAN = BeanHelper.name("java.lang:type=Threading");
public long[] getThreadCpuTime(long[] ids);
public long[] getThreadUserTime(long[] ids);
public long[] getThreadAllocatedBytes(long[] ids);
public static class BeanHelper {
private static ObjectName name(String name) {
try {
return new ObjectName(name);
} catch (MalformedObjectNameException e) {
throw new RuntimeException(e);
}
}
public static ThreadMXBean connectThreadMXBean(MBeanServerConnection mserver) {
ThreadMXBean bean;
try {
bean = JMX.newMXBeanProxy(mserver, THREADING_MBEAN, ThreadMXBeanEx.class);
} catch(Exception e) {
bean = JMX.newMXBeanProxy(mserver, THREADING_MBEAN, ThreadMXBean.class);
}
return bean;
}
}
}