如何在Java中为“new Integer(1)”分配内存?

时间:2012-08-03 07:18:53

标签: java memory-management

我对java的内存分配技术有点困惑。任何人都可以帮助我,java将如何为以下代码分配内存?

Integer a;
a = new Integer(1);

我要求Integer a,jvm将创建64位引用和a = new Integer(1),因为它将分配更多内存来存储值1.这是正确的吗?

2 个答案:

答案 0 :(得分:9)

Integer a;将在堆栈中分配内存以保存参考值并使用null初始化

new在堆内存中创建实例

答案 1 :(得分:3)

大多数JVM(甚至是64位)都使用32位引用。 (较新的JVM使用32位引用,最多可达32 GB的堆)引用位于堆栈或CPU寄存器中,通常不计算在内。整数在堆上分配。

Integer i = new Integer(1); // creates a new object every time.
Integer j = 1; // use a cached value.

使用自动装箱不仅更短,而且可以更高效,因为它可以使用缓存。

当然效率最高的是

int k = 1; // not object created and no heap used.

对于自动装箱的值,与基元相比,性能差异非常小,并且引用可能与int值的大小相同。但是,对于较大的值,可能会有显着的性能差异。