Java对象创建和内存大小

时间:2010-01-14 06:28:28

标签: java memory allocation

我正在尝试了解使用 new 运算符创建Java对象时的大小。

考虑我正在创建一个类

public class NewClass {

    NewClass() { }

}

当我使用NewClass创建NewClass nc = new NewClass();的实例时。在堆中创建的NewClass的大小是多少?

~Jegan

2 个答案:

答案 0 :(得分:9)

分析是最好的方法,但你可以得到一个好的估计:

每个对象8个字节(裸露开销),以及字段。

  • 原始字段:如Java中所列。注意:布尔值需要1个完整字节。
  • 对象字段:1个指针(32位VM上4个字节,64位上8个),加上对象本身的大小(如果不是对预先存在的对象的引用)
  • 数组:4个字节+元素的对象/基元
  • 字符串:远,太多了。 IIRC,24字节+ 2字节/字符。可能会更多。

最终结果增加到最接近的8个字节的倍数。

另请参阅我的示例here,了解如何计算更复杂对象的内存使用情况。注意:这些规则可能因VM而异,并且可能随着VM的较新版本的出现而改变。我估计只适用于Sun JVM,尽管我怀疑IBM的结果会类似。

答案 1 :(得分:0)

我认为您需要使用分析器来衡量这一点。您可以使用JProfilerYourKit个人资料。