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

实现一个简单的 JVM ?

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

    目前进度大概在 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 写的.
    Laum
        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  
    PRO
       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     Solana     1052 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 18:24 PVG 02:24 LAX 11:24 JFK 14:24
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86