一、概览图

JVM学习笔记第24天-方法区内部结构

二、方法区存储什么?

《深入理解JAVA虚拟机》书中对方法区(Method Area)存储内容描述如下:

它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等。

  • 类型信息

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

  1. 这个类型的有效完整名称(全名=包名.类名)
  2. 这个类型直接父类的有效完整名称(对于interface或java.lang.object,都没有父类)
  3. 这个类型的修饰符(public、abstract、final的某个子集)
  4. 这个类型的直接接口的有序列表
  • 域(Field)信息
  1. JVM必须在方法区中保存类型的所有域的相关信息,以及域的声明顺序;
  2. 域的相关信息包括:域名称、域类型、域修饰符(public,private,protected,static,final,volatile,transient的某个子集)
  • 方法(Method)信息

JVM必须保存方法的如下信息:

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

 

相关文章:

  • 2021-04-29
  • 2021-10-23
  • 2021-04-28
  • 2021-04-09
  • 2021-06-23
  • 2021-05-30
  • 2021-10-19
  • 2021-08-16
猜你喜欢
  • 2021-10-25
  • 2021-12-23
  • 2022-12-23
  • 2021-08-19
  • 2021-12-22
  • 2021-04-17
  • 2021-09-27
相关资源
相似解决方案