一个静态变量是否在堆上的永久gen空间上

如果我在Java中创建一个静态变量,它会自动进入堆中的perm gen空间吗? 似乎很明显,答案是肯定的,但我无法在任何地方找到确认。 我知道静态变量(也是字符串和枚举)在JVM的生命中是活着的,所以它必须放在永久堆中。 它是否正确?


“PermGen”的概念完全依赖于实现,JVM可以自由处理“物理”内存管理,但对他们来说是有意义的 - 他们甚至不需要提供垃圾收集!

PermGen只是某些JVM实现(包括Sun / Oracle HotSpot JVM多年)的一个特性,实际上它在Oracle Java 8 JVM中采用了一种新方法。 包含PermGen概念的JVM很可能会将静态变量放在那里用于性能,但完全取决于程序员。


JLS#17.4.1共享变量

可以在线程之间共享的内存称为共享内存或堆内存。

所有实例字段,静态字段和数组元素都存储在堆内存中。 在本章中,我们使用术语变量来指代字段和数组元素。 局部变量(第14.4节),形式方法参数(第8.4.1节)或异常处理程序参数永远不会在线程之间共享,并且不受内存模型的影响。

很好的描述在这里通过@Stephen:在Java中的静态分配 - 堆,堆栈和永久生成

链接地址: http://www.djcxy.com/p/82863.html

上一篇: Does a static variable go on the permanent gen space on the heap

下一篇: Maximizing Java Heap Space