首页 > 解决方案 > java接口中如何获取线程当前内存的利用率

问题描述

java接口中如何获取线程当前内存的利用率?需要用到哪些类和方法?

标签: javathreadpool

解决方案


这与线程内存的利用率无关。我不确定。

我在这里包含了我曾经用来提取类似统计数据的代码。我的是 Windows 上的 JDK 8。

它从本地 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();
    }
}

推荐阅读