JVM的方法区和永久带的关系

本文详细解释了JVM中的方法区与永久代的关系,包括它们的定义、存储内容及在不同JVM实现中的变化,如HotSpot JVM从永久代到Metaspace的演变。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文这这里:https://www.imooc.com/article/47149

 

群里面有小伙伴问到这个问题,说在网上看了很多文章,但是还是没弄明白这俩是啥关系,下面我们就来详细的解释一下:

什么是方法区?

方法区(Method Area)是jvm规范里面的运行时数据区的一个组成部分,jvm规范中的运行时数据区还包含了:pc寄存器、虚拟机栈、堆、方法区、运行时常量池、本地方法栈。

方法区存储东西?

主要用来存储class、运行时常量池、字段、方法、代码、JIT代码等。

注意:

(1)运行时数据区跟内存不是一个概念。

(2)方法区是运行时数据区的一部分

(3)方法区是jvm规范中的一部分,并不是实际的实现,切忌将规范跟实现混为一谈。

我们再来看下永久带(Perm区):

永久带又叫Perm区,只存在于hotspot jvm中,并且只存在于jdk7和之前的版本中,jdk8中已经彻底移除了永久带,jdk8中引入了一个新的内存区域叫metaspace。

(1)并不是所有的jvm中都有永久带,ibm的j9,oracle的JRocket都没有永久带。

(2)永久带是实现层面的东西。

(3)永久带里面存的东西基本上就是方法区规定的那些东西。

因此,我们可以说,永久带是方法区的一种实现,当然,在hotspot jdk8中metaspace可以看成是方法区的一种实现。

下面我们来看下hotspot jdk8中移除了永久带以后的内存结构:

https://img2.mukewang.com/5b59198f000159c905450385.jpg

结论:

(1)方法区是规范层面的东西,规定了这一个区域要存放哪些东西

(2)永久带或者是metaspace是对方法区的不同实现,是实现层面的东西。

更多关于jvm内存相关的话题,包括内存结构、各种垃圾收集器、如何做GC调优等可以观看我的一个视频课程:Java生产环境下性能监控与调优详解 以上,希望对你能有点用处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值