java - JVM 在哪里存储原始变量?

标签 java memory-management jvm

Java JVM 在哪里存储原语变量,原语使用的内存在使用后如何释放?

我猜它在堆栈上?

最佳答案

简单的回答:这取决于变量的声明位置,而不是其类型。

局部变量存储在堆栈中。实例和静态变量存储在堆上。

不要忘记,对于引用类型的变量,变量的值是引用,而不是对象。 (数组也是引用类型 - 所以如果你有一个 int[],值将在堆上。)

现在,这可能是一个过于简单化的答案,因为智能 VM 可能能够检测特定引用类型变量是否引用了永远无法“逃脱”当前方法的对象。如果是这种情况,它可能会将整个对象内联到堆栈中。

但是在概念上这个模型是准确的。因此,int 类型的变量被声明为实例变量,如下所示:

class Foo
{
    private int value;
    ...
}

在概念上将作为任何 Foo 实例的数据的一部分存在于堆中。它将作为释放实例的一部分被释放 - 它只是代表 Foo 实例的数据 block 中的 4 个字节;它不需要单独的释放。

关于java - JVM 在哪里存储原始变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3698078/

相关文章:

java - rabbitmq 消费 json 消息并转换成 Java 对象

java - Android 拍照并保存到变量

unix - Unix kill 命令是否确保动态分配的内存将正确返回?

R h2o 连接(内存)问题

java - 从命令行运行时 JVM 变量转义等于

java - 如何强制 CFHTTP 不对查询参数进行编码?

java - Google App Engine Java 是否支持 Eclipse 中的热部署?

java - 在页面加载时从 JSP 文件调用 servlet

c - 使用 free() 函数

java - Windows JVM 限制 http 输出流的上传速度