内存中为新Object()保留了多少空间;

时间:2013-05-17 08:12:10

标签: java

我只是想知道如果我创建一个像New Object()这样的新对象,将在内存中保留多少空间。由于在堆上创建的任何对象占用的空间等于其实例变量的大小总和。

2 个答案:

答案 0 :(得分:16)

  

因为在堆上创建的任何对象占用的空间等于其实例变量的大小总和。

不,它需要更多的内存。指向类型信息的指针以及与对象关联的监视器(用于同步目的)需要额外的内存。

确切的大小因JVM而异(特别是处理器架构)。对于对齐目的,JVM也可以实现最小大小,但是获得“前4字节字段可用”策略。例如,假设在64位JVM上,类型指针占用8个字节,监视器信息占用4个字节,您可能仍希望分配16个字节而不是12个用于对齐目的 - 在这种情况下,对象具有单个{{1 }}字段可以占用与普通int实例相同的内存。

答案 1 :(得分:3)

问题将是一个非常广泛的问题。

它取决于类变量,或者您可以在java中调用状态内存使用。

它还有一些标题和引用的额外内存要求。

Java对象使用的堆内存包括

  • 原始字段的内存,根据它们的大小(参见下面的原始类型的大小);

  • 参考字段的内存(每个4字节);

  • 一个对象标题,由几个字节的“内务”信息组成;

java中的对象还需要一些“内务”信息,例如记录对象的类,ID和状态标志,例如对象当前是否可访问,当前是同步锁定等。

Java对象标头大小因32位和64位jvm而异。

虽然这些是主要的内存消费者,但jvm还需要额外的字段,有时候需要对齐代码e.t.c。

原始类型的大小

布尔&字节 - 1

char&简短 - 2

int&漂浮 - 4

长&双重 - 8