Java对象创建和内存大小

Jeg*_*iya 1 java memory allocation

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

考虑一下我正在创建一个类

public class NewClass {

    NewClass() { }

}
Run Code Online (Sandbox Code Playgroud)

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

~Jegan

Bob*_*Gee 9

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

每个对象8个字节(裸露开销),加上字段.

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

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

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