内存分配:Java中引用占用了多少空间?

Moh*_*hit 8 java

在Java中我们编写了一个代码:

A a1;
a1 = new A();
Run Code Online (Sandbox Code Playgroud)

编译器编译代码时保留了多少字节的内存:

A a1;
Run Code Online (Sandbox Code Playgroud)

Mic*_*rdt 15

这不是Java标准规定的,因此您不必担心它.

从技术上讲,引用通常与机器的字大小一样大,即32位机器上的32位和64位机器上的64位,尽管一些64位JVM使用特殊魔法来允许32位引用.

  • @JosiahYoder:它在JRockit JVM中称为"压缩引用" (2认同)

red*_*una 11

堆栈上使用了一个指针的内存.这应该是32位(4字节),除非您的机器处于64位模式.

编辑:

我看到有些人感到困惑,并认为A对象本身是在堆栈上分配的.Java中并非如此:所有对象都在堆上分配(当然是模数JIT优化).该行A a1;只是分配指针a1,最初设置为NULL.指针本身位于堆栈中,当然它指向的堆将在堆栈中.后面的调用new A()将在堆上分配一个A对象,并且该分配的大小取决于A中的内容.


aeh*_*lke -1

一个a1; 在堆栈上分配,而不是在堆上分配。

然而,据我所知,这一切都取决于实施,并没有实际定义。