多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
1. JDK6、JDK7 时,方法区 就是`PermGen`(永久代)。 2. JDK8 时,方法区就是`Metaspace`(元空间) 3. 常量大致分为运行时常量池(元空间)和字符串常量池(堆) 4. Metaspace(元空间)和 PermGen(永久代)类似,都是对 JVM规范中方法区的一种落地实现。**不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存**。 常量池和字符串常量池的版本变化 ![](https://img.kancloud.cn/d5/2d/d52df048e9d392d0cc46d7d08e46c5d0_1657x859.png) 在JDK1.7之前运行时常量池逻辑包含字符串常量池存放在方法区, 此时hotspot虚拟机对方法区的实现为永久代 在JDK1.7 字符串常量池被从方法区拿到了堆中, 这里没有提到运行时常量池,也就是说 字符串常量池被单独拿到堆,运行时常量池剩下的东西还在方法区, 也就是hotspot中的永久代 在JDK1.8 hotspot移除了永久代用元空间(Metaspace)取而代之, 这时候字符串常量池还在堆, 运行时常量池还在方法区, 只不过方法区的实现从永久代变成了元空间(Metaspace)