我的问题或问题如下:
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/