整数与整数:关于记忆

时间:2011-12-07 17:36:57

标签: java integer int

我想知道占用的内存是否存在差异 Integer nint n

我知道int n通常占用4个字节,Integer n

怎么样

4 个答案:

答案 0 :(得分:41)

通常,Hotspot中Java对象使用的堆内存包括:

  • 一个对象标题,由几个字节的“管家”信息组成;
  • 原始字段的内存,根据其大小(int n-> 32位)
  • 引用字段的内存(每个4个字节)(整数n - > 32位)
  • padding:在对象数据之后可能会浪费一些“浪费”未使用的字节,以使每个对象从一个方便的字节倍数的地址开始,并减少表示指向对象的指针所需的位数。

根据Mark Peters的建议,我想在下面添加链接 http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

答案 1 :(得分:7)

Java中的Integer对象占用16个字节。

我不知道运行64位和32位JVM是否有所不同。对于原始类型无关紧要。但我无法确定对象的内存占用情况如何在64位系统下发生变化(如果有的话)。

您可以在此自行测试:

Java Tip 130: Do you know your data size?

答案 2 :(得分:3)

对于int:每个元素使用4个字节而不使用包装器,每个元素使用16个包装器。

包装的double报告每个元素24个字节,实际的double值为64位(8个字节)。

有关详细信息here

答案 3 :(得分:0)

int 是一种原始数据类型,需要 32位(4字节)进行存储。

当您的Java代码使用new运算符创建Java对象的实例时,更多 数据分配超出您的预期。 例如,您可能会惊讶地发现,一个int值与一个Integer对象(可以容纳int值的最小对象)的大小比为 通常是1:4。

整数是一个需要 128位(16字节)存储整数值的对象。

当我们使用新的Operator创建新的Integer时,它会按照以下方式分配内存。

  1. Class 对象(32位)-由指向类信息的指针组成,该信息在我们的案例中描述了指向java.lang.Integer类的对象

  2. 标志(32位)-它是描述对象状态的标志的集合。 就像它具有哈希码一样,是否为数组,即其形状。

  3. 锁定(32位)-存储对象的同步信息。该对象当前是否同步。

以上3点称为对象的元数据

  1. 最后的元数据后跟对象数据(32位)本身。如果是Integer,则其为单个int值。

以上所有解释均基于32位处理器体系结构。它可能不同于 JVM版本供应商