侧边栏壁纸
博主头像
再见理想博主等级

只争朝夕,不负韶华

  • 累计撰写 112 篇文章
  • 累计创建 64 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

JVM-方法区、运行时常量池

再见理想
2022-05-25 / 0 评论 / 0 点赞 / 282 阅读 / 494 字

方法区

方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

它是一个规范,不同虚拟机实现可能不一样。


jdk1.8前:

PermGen:永久代
永久代中包含StringTable
调整永久代大小:-XX:MAxPermSize=

jdk1.8后:

MetaSpace:元空间
相对1.8前,StringTable移到了堆内存
调整元空间大小:-XX:MaxMetaspaceSize=

运行时常量池:

运行时常量池(Runtime Constant Pool)是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。

运行时常量池相对于Class文件常量池的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入Class文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用得比较多的便是String类的intern()方法。

①就是一张表,虚拟机指令根据这张常量表找到要执行的类名,方法名,参数类型等信息;

②常量池是*.class文件中的。当该类被加载,它的常量池信息就会放入运行时常量池,并把里面的符号地址变为真实地址。

字符串池:

JVM-字符串池(String Pool)

0

评论区