如何通过内存堆中的java对象获取占用的空间?

时间:2010-07-20 22:34:48

标签: java jvm heap-memory

对象从内存堆中占用多少空间?怎么办呢?

2 个答案:

答案 0 :(得分:1)

这比仅使用空闲内存计算(没有考虑垃圾收集和其他线程的新分配)要复杂得多。看看:

http://www.javaspecialists.eu/archive/Issue142.html

然而,这是高级的东西。

- 编辑 -

上面的解决方案找到对象的大小(使用堆栈遍历参考网络,访问引用的集合,当然还包括检测)。

然而,获得对象的大小更简单,并且可以通过java 1.5工具实现而无需额外的工作(参见Instrumentation.getObjectSize())。

答案 1 :(得分:0)

对象占用的内存量因JVM实现而异,有时从一个平台到下一个平台。

您可以通过计算声明为对象类的实例变量的基元类型和对象引用的数量和大小来估计数量。

例如:

public class Monkey {
  int arms;
  Animal parent;
}

..有1个对象引用和1个int原语,在32位体系结构中,每个实例占用大约 8个字节。