一 点睛
首先明确:只有 Hotspot 才有永久代。对 BEA JRockit、IBM J9 等来说,是不存在永久代的概念的。原则上如何实现方法区属于虚拟机实现细节,不受《Java虚拟机规范》管束,并不要求统一。
Hotspot中方法区的变化:
二 JDK6 的时候
方法区的七个部分大一统,都由永久代实现。
三 JDK7 的时候
方法区的七个部分有两大部分分离出去,划给了堆。剩下五部分依然由永久代实现。
四 JDK8的时候
永久代的概念被元空间取代,元空间管理的五大部分跟随元空间变成了本地内存,不再是虚拟机内存的一部分。
元空间大小只受物理内存影响。