java 内存分为四个区:
stack segment,存放函数参数和局部变量;
heap segment,存放对象;
data segment,存放 静态变量或者字符串常量;
code segment,存放类中的方法。
类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。
然而,后来的静态变量的存储位置又有变化。 Java学习笔记9---类静态成员变量的存储位置及JVM的内存划分指出,JDK8 之后 , “元空间 Metaspace” 代替了“永久代 PermGen”,永久代中的数据也进行了迁移,静态成员变量迁移到了堆中。
注意,方法区是JVM的规范,永久代是方法区的具体实现。