我想知道占用的内存是否存在差异
Integer n
和int n
。
我知道int n
通常占用4个字节,Integer n
答案 0 :(得分:41)
通常,Hotspot中Java对象使用的堆内存包括:
根据Mark Peters的建议,我想在下面添加链接 http://www.javamex.com/tutorials/memory/object_memory_usage.shtml
答案 1 :(得分:7)
Java中的Integer对象占用16个字节。
我不知道运行64位和32位JVM是否有所不同。对于原始类型,无关紧要。但我无法确定对象的内存占用情况如何在64位系统下发生变化(如果有的话)。
您可以在此自行测试:
答案 2 :(得分:3)
答案 3 :(得分:0)
int 是一种原始数据类型,需要 32位(4字节)进行存储。
当您的Java代码使用new运算符创建Java对象的实例时,更多 数据分配超出您的预期。 例如,您可能会惊讶地发现,一个int值与一个Integer对象(可以容纳int值的最小对象)的大小比为 通常是1:4。
整数是一个需要 128位(16字节)存储整数值的对象。
当我们使用新的Operator创建新的Integer时,它会按照以下方式分配内存。
Class 对象(32位)-由指向类信息的指针组成,该信息在我们的案例中描述了指向java.lang.Integer类的对象
标志(32位)-它是描述对象状态的标志的集合。 就像它具有哈希码一样,是否为数组,即其形状。
锁定(32位)-存储对象的同步信息。该对象当前是否同步。
以上3点称为对象的元数据。
以上所有解释均基于32位处理器体系结构。它可能不同于 JVM版本和供应商。