方法区的演进细节
首先明确:只有 Hotspot 才有永久代。 BEA JRockit、 IBMJ9 等来说,是不存在永久代的概念的。原则上如何实现方法区属于虚拟机实现细节,不受《Java 虚拟机规范》管束,并不要求统一
Hotspot 中方法区的变化:
JDK1.6 及以前 有永久代,静态变量存储在永久代上
JDK1.7 有永久代,但已经逐步 “去永久代”, 字符串常量池,静态变量移除, 保存在堆中
JDK1.8无永久代, 类型信息,字段,方法,常量保存在本地内存的元空间,但字符串常量池、静态变量仍然在堆中。