Skip to content

Latest commit

 

History

History
74 lines (61 loc) · 2.07 KB

note.md

File metadata and controls

74 lines (61 loc) · 2.07 KB

解析 class 文件

运行时数据区

Thread 私有

  • PC
  • Java 虚拟机栈
  • 栈帧 Frame
  • 局部变量表
  • 操作数栈
  • 动态链接: 指向运行时常量池
  • 方法返回

Thread { Pc Frame { LocalVars OperandStack DynamicLinking Method } }

线程共有

  • Java 堆: 类实例和数组分配内存的地方, GC 的主要区域
  • 方法区: 存储类结构信息, 包括运行时常量池,字段,方法,构造函数和方法的字节码,,
  • 运行时常量池: 字面常量等等
  • 本地方法栈: native 方法栈 暂不实现

JavaHeap MethodArea { List }

指令集和解释器

invokestatic:调用静态方法; invokespecial:调用实例构造方法,私有方法和父类方法; invokevirtual:调用虚方法; invokeinterface:调用接口方法,在运行时再确定一个实现此接口的对象; invokedynamic:在运行时动态解析出调用点限定符所引用的方法之后,调用该方法;

类和对象

方法调用

数组

本地方法调用(*)

反射

异常

线程

gc

整体架构 / 执行流程

  • start: 命令行工具
  • parse .class file: 解析 class 文件,保存成类信息
  • init: 初始化数据区域,类信息等
  • find main method
  • run main method: 指令解释器,函数调用,线程,gc,异常,反射
  • finish

Java 虚拟机动态地加载、链接与初始化类和接口。

加载是根据特定名称查找类或接口类型的 二进制表示(Binary Representation),并由此二进制表示创建类或接口的过程。 链接是为 了让类或接口可以被 Java 虚拟机执行,而将类或接口并入虚拟机运行时状态的过程。 类或接口的 初始化是指执行类或接口的初始化方法。

Java 虚拟机为每个类型都维护一个常量池 当类或接口创建时(§5.3),它的二进制表示中的 constant_pool 表(§4.4)被用来构 造运行时常量池。

TODO

命令行工具

先不做的
vtable native 方法
多维数组