Как получить коэффициент использования текущей памяти потока в интерфейсе Java - PullRequest
0 голосов
/ 16 октября 2018

Как получить коэффициент использования текущей памяти потока в интерфейсе Java? Какие классы и методы вам нужно использовать?

1 Ответ

0 голосов
/ 16 октября 2018

Речь идет конкретно не о степени использования памяти потока.Я не уверен в этом.

Я включил сюда код, который использовал когда-то для получения аналогичной статистики.Мой - JDK 8 в Windows.

Он печатает выделенные байты для текущего потока с локальной виртуальной машины.

Код, который показывает, как можно подключиться к удаленной 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();
    }
}
...