Java 实现简易 JVM
github 地址
com\zvm
basestruct\ #读取字节码为内存中 ClassFile 时的基本数据结构
classfile\ #类解析相关
attribute\ #属性表:jdk8 中的 23 种属性
constantpool\ #常量池:jdk8 中 10 种常量类型
ClassFile.java #解析后的 class 文件
cp_info.java #ClassFile 中的常量池表示
field_info.java #ClassFile 中的字段表示
IOUtils.java #解析字节码的工具类
method_info.java #ClassFile 中的方法表示
ZvmClassLoader.java #待重构
draft\
gc\
GC.java #GC 类,目前只有标记清除算法
interpreter\
CallSite.java #调用方法时的入口
CodeUtils.java #控制 pc 的工具类
Descriptor.java #方法调用时,表示返回数据和入参结构
Interpreter.java #取 opcode 并执行的类
Opcode.java #指令
Ref.java #表示 methodRef 或 fieldRef:含类名、描述符、方法名 /字段名
jnative\java\lang\ #预留实现本地方法
memory\
ArrayFields.java #保存堆中的数组
JavaHeap.java #表示堆,对象和数组都分配在这
MethodArea.java #方法区
ObjectFields.java #表示堆中的对象
runtime\ #运行时数据
struct\ #一些基本数据结构
JavaClass.java #运行时表示:ClassFile 的入口,加一些类的信息
JavaFrame.java #运行时表示:一个方法所用的帧
JThread.java #运行时表示:一个线程(目前未实现多线程)
LocalVars.java #运行时表示:帧中的局部变量表
OperandStack.java #运行时表示:帧中的操作数栈
RunTimeEnv.java #运行时的环境,包括 JavaHeap、MethodMrea 等
StaticVars.java #JavaClass 中的静态字段分配内存
ThreadStack.java #线程栈:运行时,方法调用帧由底至上组成线程栈
utils\
TypeUtils.java #类型转换工具类
Vars.java #供 LocalVars、LocalVars、ObjectFields 继承使用
Cmd.java #解析命令行
JavaMain.java #启动入口类,含 main 方法
ZVM.java #表示虚拟机
文档、书籍参考
代码参考
工具
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.