1

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

Integer a;
a = new Integer(1);

我问的是Integer a,jvm 将创建 64 位引用,并a = new Integer(1) 为此分配更多内存来存储值 1。这是正确的吗?

4

2 回答 2

9

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

new在堆内存中创建实例

于 2012-08-03T07:20:04.937 回答
3

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

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值的大小相同。但是,对于较大的值,可能存在显着的性能差异。

于 2012-08-03T08:00:05.050 回答