实现一个简单的 JVM 比我想象的还是要难一些的, 中途会碰到一些有意思的问题, 由于项目尚未结束, 没大块的时间来整理, 暂开贴, 一备个人日后回顾, 二则若有他人交流与此, 岂不善哉. 有兴趣不妨关注此贴, 必有更新.
最终的目标的 mini-jvm 把 mini-jvm 跑起来. 目前离这个目标还很远.
一些基础特性已简单实现.
字节码执行引擎
方法调用
lambda
项目地址: mini-jvm
1
jaylee4869 2019-12-17 20:14:44 +08:00
这算是 Java 自举?
|
2
guxingke OP https://github.com/guxingke/mini-jvm/commit/d2a75a12308c42d22b19f89177ba8a4dfef6cef7
今日更新. 主要是格式化了 debug 日志的输出 , 接口的递归初始化 , instanceof 指令实现. 选项 verbose:class , 输出加载的 class ![1576584932.png]( https://raw.githubusercontent.com/guxingke/oss/master/blog/1576584932.png) 选项 verbose:trace , 输出执行的字节码指令 ![1576585316.png]( https://raw.githubusercontent.com/guxingke/oss/master/blog/1576585316.png) 选项 verbose:debug, 输出执行每个字节码指令的栈帧信息. ![1576585426.png]( https://raw.githubusercontent.com/guxingke/oss/master/blog/1576585426.png) |
3
mortonnex 2019-12-17 20:27:12 +08:00 1
楼主厉害了!
|
4
guxingke OP @jaylee4869 是的, 想这么干
|
5
keelii 2019-12-17 20:52:21 +08:00
所以直播呢?
|
7
guxingke OP 实现了简单的 JDB (The Java Debugger)
n/next -> 执行到下一个方法调用 (invoke 指令) s/step -> 单步执行指令 ls/list -> 输出当前方法字节码 run -> 启动 env -> 输出当前栈帧的信息. https://raw.githubusercontent.com/guxingke/oss/master/blog/1576679149.png |