java内存使用情况

时间:2010-06-07 10:18:20

标签: java memory

我知道我总是发布关于数组内存使用情况的类似问题,但现在我想更具体地发布问题。

我读完这篇文章后:http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

我不明白一些事情:

  • 数据类型的大小始终是 同样也在不同的平台上 (Linux / Windows 32/64位)??? 所以int总是32位?;
  • 当我计算内存使用量时我 必须也把参考值 本身?如果我有一个对象 具有int字段的类 内存将是12(对象标题)+ 4 reference + 4(int字段)+ 3 (填充)= 24字节??

2 个答案:

答案 0 :(得分:1)

首先,是的,根据the language specificationint始终为32位。

你不应该(IMO)在类本身的内存使用中包含引用本身,因为它不是对象的一部分。特别是,您不知道有多少个地方会引用同一个对象:如果10个不同的对象各自存储对您的对象的引用,您最终将支付参考成本10次。但是,在计算存储它的任何成本时,您应该考虑该参考 - 因此,如果您有一个带有作为参考的字段的类,那么请计算那里的成本。 (同样,如果您正在计算堆栈空间,请考虑局部变量。)

答案 1 :(得分:1)

int始终为32位。但是,JVM规范并未强制要求对象的字段连续存储在内存中。因此,可能 64位JVM可能会在64位边界上对齐int个字段。 (当然,Sun 32位JVM在32位边界上对齐8位和16位字段!)