-1

再会!我无法获取 java 线程的内存使用情况。我的研究把我带到了 ThreadMxBean 库。根据javadocThreadMXBean#setThreadAllocatedMemoryEnabled,应该有一个方法getThreadAllocatedBytes允许获取线程的内存。但是,我找不到这种类方法,而存在上述文档中描述的其他方法。

示例getCurrentThreadCpuTime()isThreadCpuTimeEnabled()显示在我的代码中。

import java.lang.management.ManagementFactory;
import java.lang.management.ThreadMXBean;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MalformedObjectNameException;
import javax.management.ReflectionException;

class TwoThreadsTest {
    public static void main (String[] args) throws Exception {
        new Coding("Jamaica").start();
        ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
        long b = threadBean.getCurrentThreadCpuTime();
        boolean bool= threadBean.isThreadCpuTimeEnabled();
        System.out.println(bool);
    }
}
4

1 回答 1

5

java.lang.management.ThreadMXBean当方法实际在接口中定义时,您的代码正在使用接口com.sun.management.ThreadMXBean。您的链接指的是后者。

编辑:

没有“线程记忆”。所有线程在您的进程中共享同一个堆,并且您的线程没有私有内存。getThreadAllocatedBytes() 方法返回的是线程分配的字节数。据我了解,这意味着它还计算分配的不再引用的字节数,并且可能或已经被垃圾收集器回收。

因此,它是线程分配内存的度量,而不是内存使用量的度量。

于 2013-02-01T01:44:14.050 回答