Java 类的静态变量存放在哪块内存中?

2023-05-19  本文已影响0人  Bfmall

一、JVM 控制的内存区域

主要分为 3 块:

3块内存区域的生命周期:

二、线程私有区域

1、程序计数器(Program Counter Register)

2、虚拟机栈(VM Stack)

3、本地方法栈(Native Method Stack)

三、线程共享区域

1、堆(Heap)

2、方法区(Method Area)

四、至此可以回答类的静态变量存放在 JVM 运行时的哪块内存了?

HotSpot VM,JDK 6 及之前版本静态变量存放在永久代(Permanent Generation,使用永久代实现的方法区)中;JDK 7 开始,静态变量改存放到 java.lang.Class 对象的末尾,即 Heap 中。虚拟机规范中,是把方法区描述为堆的一个逻辑部分,以上的差异只是实现细节的不同。

静态成员变量存储在堆的永久生成区域中,这是因为static不属于对象而是属于类,所以它被认为是类定义的一部分。如果静态变量是基元类型,它们将存储在permGen中。如果静态变量是一个引用变量,例如static Person obj=new Person(),那么reference变量obj将被存储在permGen中,新创建的objected将被放置在年轻一代中。


©著作权归作者所有:来自51CTO博客作者mb5fdcae3079e89的原创作品,请联系作者获取转载授权,否则将追究法律责任
Java 类的静态变量存放在哪块内存中?
https://blog.51cto.com/u_15061941/2591637

上一篇 下一篇

猜你喜欢

热点阅读