37 方法区的内部结构

本文详细介绍了Java虚拟机的方法区,包括存储的内容如类型信息、域和方法详情、常量池以及运行时常量池的作用。方法区保存了类的类型信息、域和方法的详细信息,以及静态变量和编译后的代码。常量池则存储字面量和符号引用,对于程序执行至关重要。通过对方法区的理解,有助于深入掌握Java内存管理和程序执行流程。
摘要由CSDN通过智能技术生成

在这里插入图片描述

方法存储什么

在这里插入图片描述

方法区存储信息主要:类型信息,域(Field)信息,方法(Method)信息,常量,静态变量,即时编译器编译后的代码缓存

1、类型信息

对每个加载的类型(类class、接口、枚举、注解),jvm必须在方法区存储以下类型信息

(1)类型的完整有效名称(全名=报名.类名)

(2)类型直接父类的完整有效名(接口和java.lang.Object,没有父类)

(3)类型的修饰符(public,abstract,final的某个子集)

(4)类型直接接口的一个有序列表

2、域(Field)信息

(1)保存类型的所有域的相关信息以及域的声明顺序

(2)域的相关信息:域名称,域类型,域修饰符(public,private,protected,static,final,volatile,transient)

3、方法(Method)信息

jvm保存所有方法的以下信息,同域信息一样的包括声明顺序

(1)方法名称
(2)方法返回参数(或者void)
(3)方法参数的数量和类型(按顺序)
(4)方法的修饰符(public,private,protected,static,final,synchronized,native,abstract)
(5)方法的字节码,操作数栈、局部变量表及大小(abstract和native除外)
(6)异常表(abstract和native除外),每个异常处理的开始位置,结束位置,代码处理在程序计数器中的偏移地址、被捕获的异常类的常量池索引。

4、常量池

一个有效的字节码文件除了包含类的版本信息,字段,方法以及接口等描述信息外,还包含一项信息那就是常量池,包含各种字面量(数量值,字符串值)和对类型(类),域和方法的符号引用。
常量池,可以看作是一个表,虚拟机指令根据这张常量表找到要执行的类名,方法名,参数类型,字面量等类型
(1)方法区,内部包含了运行时常量池
(2)字节码文件,内部包含了常量池

为什么需要常量池

在这里插入图片描述

运行时常量池

在这里插入图片描述

方法区使用举例

在这里插入图片描述
程序的执行过程如下图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值