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

实现一个简单的 JVM ?

  •  
  •   guxingke · 17 天前 · 3688 次点击

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

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

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

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

    第 1 条附言  ·  17 天前
    我的联系方式

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

    gitHub issue 什么的也欢迎

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

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

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

    gitHub issue 什么的也欢迎

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