page contents

方法区和常量池的关系

Pack 发布于 2020-02-22 18:55
阅读 542
收藏 0
分类:Java开发

方法区和常量池的关系


方法区是一种JVM规范

永久代、元空间是方法区的实现

attachments-2020-02-NVeCtq2d5e5108b12db6a.png

常量池

运行时常量池

类文件常量池

String常量池

问题

1、能仔细说说,各个JDK版本,各个常量池存放在哪吗?

421
Pack
Pack

jdk1.7:pc计数器、堆、虚拟机栈、本地方法栈、方法区(永久代)

jdk1.8:pc计数器、堆、虚拟机栈、本地方法栈、元空间(不在虚拟机,在本地内存,大小受本地内存大小限制)


常量池的变化 如下图所示:

attachments-2020-02-QKJu5E385e5108ef61999.png


去永久代的原因有:

(1)字符串存在永久代中,容易出现性能问题和内存溢出。

(2)类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。

(3)永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。

请先 登录 后评论