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 #表示虚拟机
文档、书籍参考
代码参考
工具
1
blindpirate 2019-12-26 23:15:12 +08:00
虽然实践中没什么意义,但是对于学习还是非常有帮助的,对楼主表示钦佩。
|
2
tzh476 OP @blindpirate 谢谢~,主要是加深对 JVM 的理解。
|
3
fpure 2019-12-27 00:04:24 +08:00
有人用 go 实现过 jvm,楼主不如用 rust 试试,更有实际价值
|
4
tzh476 OP @fpure 好建议。看下后面有没有机会,现在我对 java 并发本质这些还没理解,正想读写 diy os 的书模仿写一个 diy os 来理解。我写的这个参考了用 go 实现的大神,还有个用 c++实现的大神,引用中有写。
|
5
solupro 2019-12-27 09:52:45 +08:00
已 star,学习
|
6
guxingke 2019-12-27 10:58:29 +08:00
已 star , 互相学习了, 跟我实现的应该是同期开工的. 2 个月前 .
https://github.com/guxingke/mini-jvm 主要出于学习目的, 功能完备上目前应该还是楼主稍优. |
7
FrankHB 2019-12-27 12:48:23 +08:00
一般意义上的 GC 是包含 allocator 的,看了下这里 GC 就只是 collect 算法的实现?
|