JVM5、方法区

5、方法区

5.1 栈、堆、方法区的交互关系

JVM5、方法区

5.2 方法区的理解

是一种虚拟机规范,而元空间是HotSpotJVM对方法区的一种实现;HotSpotJVM中把方法区看作是非堆目的是要和堆分开,所以将方法区看作是一块独立于Java堆的内存空间;

JVM5、方法区
JVM5、方法区
JVM5、方法区
JVM5、方法区

5.3 方法区的内部结构

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

  1. 这个类型的完整有效类名
  2. 这个类型直接父类完整有效名(interface和Object都没有父类)
  3. 这个类型的修饰符
  4. 这个类型的直接接口的一个有序列表

域信息
方法信息

  • 方法名称
  • 返回类型
  • 参数的数量和类型
  • 修饰符
  • 字节码、操作数栈、局部变量表及大小
  • 异常表(异常处理的开始位置、结束位置、代码处理在PC的偏移地址、异常类的常量池索引)

non-final的类变量

  • 静态变量和类关联在一起,随着类的加载而加载,成为类数据在逻辑上的一部分。
  • 类变量被类的所有实例共享。

注:全局变量在编译的时候就会被分配了。
JVM5、方法区
JVM5、方法区
JVM5、方法区
JVM5、方法区

5.4 方法区的垃圾回收

JVM5、方法区
JVM5、方法区
JVM5、方法区

5.8 总结

JVM5、方法区