我对java的内存分配技术有点困惑。任何人都可以帮助我,java将如何为以下代码分配内存?
Integer a;
a = new Integer(1);
我要求Integer a
,jvm将创建64位引用和a = new Integer(1)
,因为它将分配更多内存来存储值1.这是正确的吗?
答案 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
值的大小相同。但是,对于较大的值,可能会有显着的性能差异。