Java中对象的内存开销是多少?

时间:2009-04-07 15:44:34

标签: java memory overhead

重复:

  

What is the memory consumption of an object in Java?

假设在Intel或AMD机器上的64位Linux上使用Java 1.6 JVM,创建一个简单的对象会使用多少内存开销(以字节为单位)?例如,二维数组中的每一行都是一个单独的对象。如果我的阵列很大,我将使用多少RAM?

1 个答案:

答案 0 :(得分:25)

这取决于您使用的JVM。

假设您没有使用带有压缩指针的JVM,则数组将使用:

  • 类型指针的8个字节。
  • 阵列长度为4个字节。
  • 数组中每个元素的8个字节(这些是指向实际对象的指针)。
  • 总和:8 + 4 + len * 8字节
  • 对于带有压缩指针的JVM:4 + 4 + len * 4字节

然后,您在数组中存储(引用)的实际对象将消耗内存,具体取决于它们是什么类型的对象。 java.lang.Object只包含指向该类的指针,因此如果使用压缩指针则为8个字节或4个字节。

对于您自己的类,您可以通过查看类中的字段来计算内存使用情况。 每个引用将消耗8个字节(压缩指针为4个字节)。每个长8个字节,int 4个字节,char / short 2个字节,byte / boolean 1个字节。但是所有这些都将与一个4或8个字节的倍数的偶数总大小对齐,具体取决于您使用的JVM。