获取线程内存

时间:2013-02-01 01:31:36

标签: java multithreading memory-management

美好的一天!我在获取java线程的内存使用方面遇到了麻烦。我的研究把我带到了ThreadMxBean库。根据{{​​3}},应该有一个方法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);
    }
}

1 个答案:

答案 0 :(得分:5)

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

编辑:

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

因此,它是衡量线程内存分配的指标,而不是衡量内存使用情况。