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