【发布时间】:2015-12-27 14:52:15
【问题描述】:
我有两个关于 Java 内存管理的问题。
- 静态变量和实例变量存储在哪里?我相信静态变量存储在 premgen 中,但我不确定实例变量。
- permgen 是堆还是方法区域的子集?
当我在谷歌上搜索时,我发现有些人说静态变量存储在堆的 permgen 部分,但其他人说 permgen 是方法区域的子集。如果后者为真,那么静态变量是否存储在方法区?
【问题讨论】:
标签: java
我有两个关于 Java 内存管理的问题。
当我在谷歌上搜索时,我发现有些人说静态变量存储在堆的 permgen 部分,但其他人说 permgen 是方法区域的子集。如果后者为真,那么静态变量是否存储在方法区?
【问题讨论】:
标签: java
Where are static and instance variables stored?
它从 Java 版本更改为 Java 版本,从运行时更改为运行时。最终,Java 被编写为隐藏内存细节,例如“我的对象在内存中的什么位置?”。
一些编译器可能会优化对象,将它们声明在堆栈或任何他们认为合适的地方。
所以答案是——“我们无法确定,这对 Java 真的很重要吗?”
【讨论】:
堆栈或堆存储更多地取决于变量是否是原始,例如int 或 对象。
除非您的原语是对象的一部分,否则它很可能会在调用堆栈上创建。否则它将被创建为堆上对象的一部分。
正如其他人所提到的,在稳定的 Java(即 8 )中不再有 PermGen 并且正在向前发展。
【讨论】:
在 JDK 8 中不再有 PERMGEN:
随着 JDK8 的出现,我们不再拥有 PermGen。不,元数据信息并没有消失,只是它所在的空间不再与 Java 堆连续。元数据现在已移动到本机内存的一个称为“元空间”的区域。
查看下面的链接了解详细信息并回答您的第二个问题。
【讨论】: