java接口如何获取线程当前内存的使用率
How to get the utilization rate of thread's current memory in java interface
java接口如何获取线程当前内存的使用率?
类需要用到什么方法?
这里不是专门针对某个线程内存的使用率。我不确定。
我在这里包含了我以前用来提取类似统计数据的代码。我的是 JDK 8 Windows。
它从本地 VM 打印为当前线程分配的字节数。
包含显示如何连接到远程 JVM 的代码只是为了表明它是可能的。但我没有展示如何从远程 JVM 中提取相同的信息。它应该给你一些想法。
而且它使用com.sun.management.ThreadMXBean
,我认为一般不推荐。我也不知道实际拉取时分配的字节信息有多有效。
import javax.management.MBeanServerConnection;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadMXBean;
public class ThreadProbe{
/* This code gives an idea about how to access a remote JVM */
MBeanServerConnection connectJMXRemote(int port){
JMXServiceURL url;
MBeanServerConnection remote = null;
try {
url = new JMXServiceURL(
"service:jmx:rmi:///jndi/rmi://localhost:" + port + "/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
remote = jmxc.getMBeanServerConnection();
System.out.println("Remote JMX connection is successful");
} catch (IOException e) {
System.out.println(getStackTrace(e));
}
return remote;
}
public void getThreadStatistics() {
/* This code gives an idea about how to access a remote JVM */
//MBeanServerConnection mbs = connectJMXRemote(9010);
ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
System.out.println( ((com.sun.management.ThreadMXBean)threadBean).
getThreadAllocatedBytes(Thread.currentThread().getId()) );
}
String getStackTrace(Throwable t){
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
t.printStackTrace(pw);
return sw.toString();
}
public static void main( String... argv ){
ThreadProbe tp =new ThreadProbe();
tp.getThreadStatistics();
}
}
java接口如何获取线程当前内存的使用率? 类需要用到什么方法?
这里不是专门针对某个线程内存的使用率。我不确定。
我在这里包含了我以前用来提取类似统计数据的代码。我的是 JDK 8 Windows。
它从本地 VM 打印为当前线程分配的字节数。
包含显示如何连接到远程 JVM 的代码只是为了表明它是可能的。但我没有展示如何从远程 JVM 中提取相同的信息。它应该给你一些想法。
而且它使用com.sun.management.ThreadMXBean
,我认为一般不推荐。我也不知道实际拉取时分配的字节信息有多有效。
import javax.management.MBeanServerConnection;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadMXBean;
public class ThreadProbe{
/* This code gives an idea about how to access a remote JVM */
MBeanServerConnection connectJMXRemote(int port){
JMXServiceURL url;
MBeanServerConnection remote = null;
try {
url = new JMXServiceURL(
"service:jmx:rmi:///jndi/rmi://localhost:" + port + "/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
remote = jmxc.getMBeanServerConnection();
System.out.println("Remote JMX connection is successful");
} catch (IOException e) {
System.out.println(getStackTrace(e));
}
return remote;
}
public void getThreadStatistics() {
/* This code gives an idea about how to access a remote JVM */
//MBeanServerConnection mbs = connectJMXRemote(9010);
ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
System.out.println( ((com.sun.management.ThreadMXBean)threadBean).
getThreadAllocatedBytes(Thread.currentThread().getId()) );
}
String getStackTrace(Throwable t){
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
t.printStackTrace(pw);
return sw.toString();
}
public static void main( String... argv ){
ThreadProbe tp =new ThreadProbe();
tp.getThreadStatistics();
}
}