[直播贴][mini-jvm] 如何使用 Java 实现一个简单的 JVM.

2019-12-17 20:12:19 +08:00
 guxingke

实现一个简单的 JVM 比我想象的还是要难一些的, 中途会碰到一些有意思的问题, 由于项目尚未结束, 没大块的时间来整理, 暂开贴, 一备个人日后回顾, 二则若有他人交流与此, 岂不善哉. 有兴趣不妨关注此贴, 必有更新.

最终的目标的 mini-jvm 把 mini-jvm 跑起来. 目前离这个目标还很远.

一些基础特性已简单实现.
字节码执行引擎
方法调用
lambda

项目地址: mini-jvm

1888 次点击
所在节点    程序员
7 条回复
jaylee4869
2019-12-17 20:14:44 +08:00
这算是 Java 自举?
guxingke
2019-12-17 20:24:29 +08:00
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)
mortonnex
2019-12-17 20:27:12 +08:00
楼主厉害了!
guxingke
2019-12-17 20:31:15 +08:00
@jaylee4869 是的, 想这么干
keelii
2019-12-17 20:52:21 +08:00
所以直播呢?
guxingke
2019-12-17 21:01:43 +08:00
@keelii 有更新了就播一点😃
guxingke
2019-12-18 22:30:13 +08:00
实现了简单的 JDB (The Java Debugger)
n/next -> 执行到下一个方法调用 (invoke 指令)
s/step -> 单步执行指令
ls/list -> 输出当前方法字节码
run -> 启动
env -> 输出当前栈帧的信息.

https://raw.githubusercontent.com/guxingke/oss/master/blog/1576679149.png

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/629927

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX