我对java的内存分配技术有点困惑。任何人都可以帮助我,java将如何为以下代码分配内存?
Integer a;
a = new Integer(1);
我问的是Integer a
,jvm 将创建 64 位引用,并a = new Integer(1)
为此分配更多内存来存储值 1。这是正确的吗?
我对java的内存分配技术有点困惑。任何人都可以帮助我,java将如何为以下代码分配内存?
Integer a;
a = new Integer(1);
我问的是Integer a
,jvm 将创建 64 位引用,并a = new Integer(1)
为此分配更多内存来存储值 1。这是正确的吗?
Integer a;
将在堆栈中分配内存以保存参考值并初始化为null
new
在堆内存中创建实例
大多数 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
值的大小相同。但是,对于较大的值,可能存在显着的性能差异。