方法区元空间实现之jdk7和8字符串常量池、运行时常量池、静态变量到底在哪?

本文探讨了方法区在JDK7和8中的实现,元空间使用本地内存,与堆逻辑连续但物理不连续。内容包括元空间存储类型信息、常量、静态变量等,以及字符串常量池从永久代移到堆的原因,旨在减少OOM并提高性能。同时,文章引发思考:为何静态变量也随字符串常量池一同移至堆空间。
摘要由CSDN通过智能技术生成


方法区(落地实现jdk7永久代,jdk8元空间),元空间并不在虚拟机中,而是使用本地内存,它和堆在逻辑上是连续的,但在物理上是不连续的,所以也叫非堆。

1、此区域是线程共享的。储存已加载的类型信息、常量、静态变量、即时编译器编译后的代码等数据;

2、常量池:编译器生成的各种字面量和符号引用;

3、关于字符串常量池和运行时常量池的位置说明:

JDK版本 方法区实现 变化
jdk1.6 永久代 字符串常量池、运行时常量池、静态变量都是在永久代中
jdk1.7 永久代 字符串常量池和静态变量被移动到了堆当中,运行时常量池还是在永久代中
jdk1.8 元空间 字符串常量池和静态变量仍然在堆当中;运行时常量池、类型信息、常量、字段、方法被移动都了元空间中

4、元空间的好处:

① 减少报OOM的可能:元空间与永久代类似,本质区别是元空间并不占用虚拟机内存了,而是使用本地内存,由于本地内存一般是比较大的,所以方法区就没有那么容易报OOM(OutOfMemoryError)。
② 提高JVM性能:元空间的垃圾回收很少,

  • 12
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值