V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
guxingke
V2EX  ›  Java

实现一个简单的 JVM ?

  •  
  •   guxingke ·
    guxingke · 2019-11-20 10:32:37 +08:00 · 7629 次点击
    这是一个创建于 1642 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近开了个新坑, 目的是实现一个简单的 JVM. 零零散散的提交了 100 个 commits , 最终的目标是 自举.

    目前进度大概在 60% 基本的 classfile 解析,字节码执行, 方法调用, 类加载, 多态 已实现.

    有感兴趣的道友吗? 同去同去.

    https://github.com/guxingke/mini-jvm

    第 1 条附言  ·  2019-11-20 12:08:50 +08:00
    我的联系方式

    vx: ``` echo "Z3V4aW5na2VfCg==" | base64 -d ```
    mail: ``` echo "YWRtaW5AZ3V4aW5na2UuY29tCg==" | base64 -d ```

    gitHub issue 什么的也欢迎

    gitter 也会响应
    42 条回复    2019-11-21 10:12:36 +08:00
    leiuu
        1
    leiuu  
       2019-11-20 10:35:32 +08:00   ❤️ 1
    爱莫能助,赞楼主。
    backfrw
        2
    backfrw  
       2019-11-20 10:36:44 +08:00
    正在看有关 jvm 的书,但是能力不足,楼主加油
    guxingke
        3
    guxingke  
    OP
       2019-11-20 10:40:58 +08:00
    @backfrw 目前实现来看, 还是比较简单的. 真的. 代码也不多, 目前就那么几千行吧
    DT37
        4
    DT37  
       2019-11-20 10:44:14 +08:00
    虽然能力不足但是我觉得是一件有意义的事儿,我试试
    qiyuey
        5
    qiyuey  
       2019-11-20 10:46:33 +08:00   ❤️ 1
    加油
    BBCCBB
        6
    BBCCBB  
       2019-11-20 10:47:19 +08:00
    楼主去研究 graal,给它贡献吧. 他也是 java 写的.
    Laumm
        7
    Laumm  
       2019-11-20 10:49:47 +08:00
    用 java 自举 JVM , 编译出来是 java 字节码还是可执行二进制文件啊?
    cjh1095358798
        8
    cjh1095358798  
       2019-11-20 10:49:58 +08:00
    厉害,而我自己 class 都没搞清楚
    tabris17
        9
    tabris17  
       2019-11-20 10:51:05 +08:00   ❤️ 6
    稍等,我把 OpenJDK 的源代码推上来
    Mohanson
        10
    Mohanson  
       2019-11-20 11:00:36 +08:00   ❤️ 2
    加油, 也贴下我的 Game Boy 虚拟机项目: https://github.com/mohanson/gameboy

    去年到今年零零散散写了 4 个虚拟机 /仿真器: Webassembly, EVM, i8080 仿真以及 Game Boy 仿真...
    guxingke
        11
    guxingke  
    OP
       2019-11-20 11:04:59 +08:00
    @DT37 比心欢迎
    redford42
        12
    redford42  
       2019-11-20 11:06:17 +08:00   ❤️ 1
    一脸迷茫的摸摸头
    guxingke
        13
    guxingke  
    OP
       2019-11-20 11:08:38 +08:00
    @Laumm 还是 java 字节码啊
    guxingke
        14
    guxingke  
    OP
       2019-11-20 11:10:03 +08:00
    @BBCCBB 在关注这个项目... 但没深究, AOT 编译还是不错的
    guxingke
        15
    guxingke  
    OP
       2019-11-20 11:10:34 +08:00
    @cjh1095358798 来吧, 自己写个 classfile 解析就弄清楚了
    Cat73
        16
    Cat73  
       2019-11-20 11:12:10 +08:00
    我曾经也想过,然后再一想 JVM 可能需要实现的东西,emmm 就放弃了。。。
    hqweay
        17
    hqweay  
       2019-11-20 11:21:08 +08:00   ❤️ 1
    能力不够,先关注了。
    guxingke
        18
    guxingke  
    OP
       2019-11-20 11:30:32 +08:00
    @Cat73 以我爬坑的经验, 到目前为止, 还算简单, 毕竟是 Java 来实现, 搞不定的可以暂时委托到宿主 JVM 去搞, 先绕一下.
    octobersnow
        19
    octobersnow  
       2019-11-20 11:53:45 +08:00 via iPhone
    有兴趣,怎么联系?
    guxingke
        20
    guxingke  
    OP
       2019-11-20 12:09:31 +08:00
    @octobersnow
    欢迎

    vx: ``` echo "Z3V4aW5na2VfCg==" | base64 -d ```
    mail: ``` echo "YWRtaW5AZ3V4aW5na2UuY29tCg==" | base64 -d ```

    gitHub issue 什么的也欢迎

    gitter 也会响应
    find
        21
    find  
       2019-11-20 12:54:31 +08:00 via iPhone   ❤️ 1
    我之前用 go 学者写过呢
    Gav1n
        22
    Gav1n  
       2019-11-20 13:27:10 +08:00
    @find 用 Go 写 JVM,大佬膜拜一下。好厉害~
    myqoo
        23
    myqoo  
       2019-11-20 13:38:00 +08:00
    @Mohanson 既然都用 rust 了,不如编译成 WebAssembly 放个 html 的在线 demo,关注量马上提升了。
    jimotudou
        24
    jimotudou  
       2019-11-20 15:10:46 +08:00
    -D
    guxingke
        25
    guxingke  
    OP
       2019-11-20 15:36:27 +08:00
    @myqoo 赞同+1
    laudukang
        26
    laudukang  
       2019-11-20 16:19:31 +08:00
    @tabris17 厉害了
    lx91714
        27
    lx91714  
       2019-11-20 16:56:28 +08:00 via Android   ❤️ 1
    厉害了
    th00000
        28
    th00000  
       2019-11-20 17:15:53 +08:00   ❤️ 1
    楼主可以参考 GraalVm 是实现了自举的 JVM,
    可以将多种语言混编, 并不局限于 JAVA, 同时不依赖 JAVA 运行环境,
    编译的最终结果是字节码文件。
    chenggiant
        29
    chenggiant  
       2019-11-20 17:16:02 +08:00 via iPhone   ❤️ 1
    大佬,Java8 里面的 lambda 语法打算怎么支持?
    lidlesseye11
        30
    lidlesseye11  
       2019-11-20 17:21:11 +08:00   ❤️ 1
    厉害了
    大佬有相关的博客什么的吗?拜读下
    guxingke
        31
    guxingke  
    OP
       2019-11-20 17:34:49 +08:00
    @th00000 暂时只想写个简单易懂的 🤣
    guxingke
        32
    guxingke  
    OP
       2019-11-20 17:36:52 +08:00
    @chenggiant 有点复杂 还没实现, 暂时的思路的是 用 asm 生成类, 然后加载调用.
    guxingke
        33
    guxingke  
    OP
       2019-11-20 17:37:18 +08:00
    @lidlesseye11 没啥东西,就不贴了 🤣
    gabon
        34
    gabon  
       2019-11-20 18:25:05 +08:00 via Android
    我之前也简单实现过,其实很简单的
    guxingke
        35
    guxingke  
    OP
       2019-11-20 20:26:58 +08:00 via Android
    @gabon 是的 懂行的来了😂
    zy5a59
        36
    zy5a59  
       2019-11-20 20:46:02 +08:00   ❤️ 1
    蹭蹭楼主热度,贴一个之前用 python 写的 https://github.com/5A59/Zvm
    Owenjia
        37
    Owenjia  
       2019-11-20 21:25:49 +08:00   ❤️ 1
    @myqoo
    话说之前教小朋友(初中)学 C 语言就是这么搞的,做的 chip8,web 界面、工具链什么的给他弄好,然后填 C 代码浏览器看结果就行。
    guxingke
        38
    guxingke  
    OP
       2019-11-20 22:20:30 +08:00
    woodrat
        39
    woodrat  
       2019-11-20 23:52:17 +08:00
    蹭蹭楼主热度,贴一个之前用 python +LLVM 写的 C 编译器 https://github.com/Mithrilwoodrat/naivecompiler
    pursuer
        40
    pursuer  
       2019-11-21 00:17:11 +08:00   ❤️ 1
    JVM 的第三方实现里 avian 算比较完善了,只是类库不全,而且原作者停止维护了,倒是希望有人会继续接替开发维护工作
    vjnjc
        41
    vjnjc  
       2019-11-21 00:45:39 +08:00
    居然有点感兴趣
    guxingke
        42
    guxingke  
    OP
       2019-11-21 10:12:36 +08:00
    @vjnjc 联系我联系我
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2260 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:17 · PVG 23:17 · LAX 08:17 · JFK 11:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.