V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
guxingke
V2EX  ›  程序员

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

  •  
  •   guxingke ·
    guxingke · 2019-12-17 20:12:19 +08:00 · 1905 次点击
    这是一个创建于 1836 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    项目地址: mini-jvm

    7 条回复    2019-12-18 22:30:13 +08:00
    jaylee4869
        1
    jaylee4869  
       2019-12-17 20:14:44 +08:00
    这算是 Java 自举?
    guxingke
        2
    guxingke  
    OP
       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
        3
    mortonnex  
       2019-12-17 20:27:12 +08:00   ❤️ 1
    楼主厉害了!
    guxingke
        4
    guxingke  
    OP
       2019-12-17 20:31:15 +08:00
    @jaylee4869 是的, 想这么干
    keelii
        5
    keelii  
       2019-12-17 20:52:21 +08:00
    所以直播呢?
    guxingke
        6
    guxingke  
    OP
       2019-12-17 21:01:43 +08:00 via Android
    @keelii 有更新了就播一点😃
    guxingke
        7
    guxingke  
    OP
       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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3461 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 10:32 · PVG 18:32 · LAX 02:32 · JFK 05:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.