Java JVM 在哪里存储原语变量,原语使用的内存在使用后如何释放?
我猜它在堆栈上?
最佳答案
简单的回答:这取决于变量的声明位置,而不是其类型。
局部变量存储在堆栈中。实例和静态变量存储在堆上。
不要忘记,对于引用类型的变量,变量的值是引用,而不是对象。 (数组也是引用类型 - 所以如果你有一个 int[]
,值将在堆上。)
现在,这可能是一个过于简单化的答案,因为智能 VM 可能能够检测特定引用类型变量是否引用了永远无法“逃脱”当前方法的对象。如果是这种情况,它可能会将整个对象内联到堆栈中。
但是在概念上这个模型是准确的。因此,int
类型的变量被声明为实例变量,如下所示:
class Foo
{
private int value;
...
}
在概念上将作为任何 Foo
实例的数据的一部分存在于堆中。它将作为释放实例的一部分被释放 - 它只是代表 Foo
实例的数据 block 中的 4 个字节;它不需要单独的释放。
关于java - JVM 在哪里存储原始变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3698078/