如何知道线程占用了多少内存,或者问题可以扩展到一个对象实例占用了多少内存?
由单例的RunTime类可以知道虚拟机环境里的占用内存总量,剩余多少内存.但是如果能够监控某个实例内存占用量无疑对优化系统有巨大的好处.

解决方案 »

  1.   

    使用JB带的Optimize.Suite组件的Thread Debugger功能可以做到这个目标
      

  2.   

    谢谢 crazycy(代言人)大虾的热心回复,但是我问的是编码中如何输出线程占用的内存.如果java标准类库中不能支持,是否有免费的第三方类库?  国内能用的起JB的人不多,我还是用记事本(开玩笑,起码也是eclipse)编码.而且Optimize Suite对于web应用开发进行调试也不方便.
      

  3.   

    在java中向达到这个目的好像很难啊。真的找找第三方类库了。
      

  4.   

    如果是编码中这个...java本身似乎没有,第三方的暂时没有使用过
      

  5.   

    做了个小测试,不知道准确否.
    几次运行均同一结果.
    class Ems 
    {
    private String[] strArr;

    public Ems()
    {
    strArr = new String[10000];
    for (int i = 0; i < strArr.length; i ++)
    strArr[i] = new String("Hello World! i="+i);
    }
    }public class MemTest
    {
    public static void main(String[] args)
    {
    long start,end;
    Runtime rt = Runtime.getRuntime();
    rt.gc(); // 垃圾回收
    start = rt.freeMemory();
    System.out.println("start="+start);
    Ems ems = new Ems();
    end = rt.freeMemory();
    System.out.println("end ="+end);

    System.out.println("end - start=" + (start - end));

    System.out.println("单个String对象占的内存为:"+((start - end)/10000.0));
    }
    }F:\>javac MemTest.javaF:\>java MemTest
    start=1936472
    end =762120
    end - start=1174352
    单个String对象占的内存为:117.4352F:\>java MemTest
    start=1936472
    end =762120
    end - start=1174352
    单个String对象占的内存为:117.4352F:\>
      

  6.   

    谢谢各位大虾的关注。这两天我也在baidu上爬了很久没有一个确切的答案
     yuzl32(Hello!有酒醉)的例子中JVM只main一个线程.到了复杂的系统里就不准确了.我们是否可以对线程内所有基本数据求和得到内存占用的近似值呢?比如 字符串占内存是 str.length*8;整型占内存32b(这由平台决定)。