美好的一天!我在获取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);
}
}
答案 0 :(得分:5)
当在接口java.lang.management.ThreadMXBean
中实际定义方法时,您的代码正在使用接口com.sun.management.ThreadMXBean
。你的链接指的是后者。
没有“线程记忆”。所有线程在您的进程中共享同一个堆,并且您的线程没有私有内存。 getThreadAllocatedBytes()返回的方法是线程分配的字节数。据我所知,这意味着它也计算了不再引用的分配字节,可能已经或已经被垃圾收集器回收。
因此,它是衡量线程内存分配的指标,而不是衡量内存使用情况。