使用Java实现一个最简易的JVM,主要实现下面的功能:

  • ClassPath的实现,主要用于定位Class文件,可能处在JDK包含的jar包中,可能是用户的路径,支持通配符,绝对/相对路径解析。
  • Class文件的解析,主要是根据读取Class的字节要求去读取字节流,解析出文件常量池,属性表等。
  • ClassLoader的实现,用于通过上一步解析出Class文件构造内存中的Class抽象结构。主要是实现类的加载(在内存中生成Class表示,生成运行时常量池),校验,准备(类静态变量初始化0),解析(符号引用到直接引用(是在使用的时候才去解析)),初始化(clinit方法)。
  • 运行时结构的构建,包括线程,栈,栈帧,pc 计数器,本地变量表,操作数栈等。方法调用的本质就是栈帧在栈中进出的过程。
  • 指令集的实现。指令包括操作码和操作数。包括加载指令,控制指令,算术运算指令,方法调用指令等。

代码地址

参考:
《深入理解 Java虚拟机》
《Java虚拟机规范》
ClassAnalyzer
手写JVM系列