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

7

重复:

在Java中,对象的内存消耗是多少?

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


看起来这是一个重复的问题,与 https://dev59.com/2nVC5IYBdhLWcg3wixw0 相同(或者至少那里的答案对于这个问题是有效的)。 - Michael Myers
是的,看起来对我来说是一个重复。 - Jon Skeet
1个回答

28

这将取决于您使用哪个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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接