java - 变量的内存分配和生命周期

标签 java

我的问题或问题如下:

1)静态变量存放在哪里。有些文章说它们驻留在堆上,有些文章说它们位于类定义的 perm gen 区域,因为它们是类属性。我知道第二个选项可能是正确的,因为它是一个类属性。
2)如果出现以下情况,最终变量位于何处以及它的生命周期是多少: a) 它是原始类型的实例变量 b) 它是原始类型方法的局部变量 c) 它是引用类型的实例变量 b) 引用类型方法的局部变量
3)引用的局部变量如果是局部的存放在哪里。
4)在数组的情况下,内存分配有什么不同,因为它们是实例变量或局部线程变量。

谢谢

最佳答案

静态变量在哪里

-静态变量驻留在方法区,permgen在方法区内。

Where does the final variable reside and what is its life if
Its an instance variable of type primitive

- 如果它的实例变量,它停留在它所属的对象内部的堆上,并且超出范围,因为没有对对象的引用拿着它..

它是原始类型方法的局部变量

- 它保留在堆栈上,并且在到达方法右括号时超出范围...

它是引用类型的实例变量

- 它停留在它所属的对象内部的堆上,并且超出范围,因为没有对持有它的对象的引用..

它是类型引用方法的局部变量

- 它保留在堆栈上,并且在到达方法右括号时超出范围...

引用局部变量如果是局部的,存放在哪里

- 在堆栈上...

在数组的情况下,内存分配有任何区别,因为它们是实例 变量或局部线程变量。

- Array 是一个对象,它存储在Heap ....但是来自 Java 6u23 版本,已经引入了Escape Analysis,据此如果JVM 决定对象不能逃逸方法,它会尝试在线程的堆栈上创建对象,NOT ON堆....

关于java - 变量的内存分配和生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12306234/

相关文章:

java - 尝试将本地依赖项添加到heroku java应用程序时,接收无法解决依赖项错误

java - Google Drive REST Api 通过 fileId 下载文件

java - 如何从 api url 获取本地货币代码?

java - Entity中两个几乎相同的OneToOne,自定义连接注解

java - 在 HTML 中部署具有安全权限的 Java Applet

java - 每次在eclipse中运行项目之前如何编译java文件

java - Apache Tika 提取扫描的 PDF 文件

java - 字段被声明为私有(private),但我可以直接访问

java - 如何使用 Spring WebSockets 和 Undertow 接收大于 16kB 的 WebSocket 消息

java - Spark ClassCastException 无法将 FiniteDuration 的实例分配给字段 RpcTimeout.duration