用 C++ 实现了一个 jvm

2018-02-05 18:48:40 +08:00
 wind2412

wind jvm:一个 java 虚拟机( C++)

  1. 仅支持 Linux 以及 macOS 系统,因为底层用了各种操作系统函数,pthread,stat 啥的。我的机器是 mac,所以就不支持 Windows 了。然后呢,我们需要 boost 库。用 brew 安装和 apt-get 啥的,yum 啥的都行。mac 就是 brew install boost,然后 ubuntu 应该是 sudo apt-get install libboost-all-dev。
  2. 这样我们就有了 boost 支持了。于是我们应该去 Makefile 修改一下,因为我配置的是我机器的环境,而且没用 cmake。所以要手动修改,把我机器上的 boost 路径目录换成你的就可以了。比如如果是 mac 的话,把 ifeq 中的 $(CC) $(LINK_FLAGS) -L/usr/local/Cellar/boost/1.60.0_2/lib/ .... 里边的目录换成你自己的就行。如果是 linux,就把 else 中的 $(CC) $(LINK_FLAGS) -L/usr/lib/x86_64-linux-gnu/ 换成你自己的。不过如果是 ubuntu,八成不需要改,因为目录的版本无关。其他的 linux 就不知道了。
  3. 然后呢,你需要知道你的 jdk class 文件路径。mac 上,一般在 /Library/Java/JavaVirtualMachines/jdk1.8xxx.jdk/Contents/Home/jre/lib/ 下的 rt.jar 文件。如果是 linux,一般在 /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ 下。配置到 config.xml 中相应位置就可以了。
  4. 于是应该就完事了。直接跑 make -j 8 啥的 8 线程编译就可以。当然如果你是虚拟机,虚拟内存没配置够的话就算了,直接跑 make -j 2 或者 make -j 3 这种就行了。
  5. 之后 bin 目录会出现 wind_jvm 这个 executable file。注意:一定要在 wind_jvm/ 目录运行 ./bin/wind_jvm Test1 这样的命令。因为内部我的 system lib path 是通过当前路径来获取的。如果不在 wind_jvm/ 目录下跑,就应该会报错。然后我给了十几个 TestX.java 文件,执行 make test 就能编译。有一个 Test7.java 是不行的。那个只有 debug version jvm 的工具才能编译。所以我编译好了直接放上去了。然后运行 ./bin/wind_jvm Test1 这种命令就好。不加 .class 后缀,参数必须有且仅有一个。
  6. 然后就可以玩了。不过只支持特定实现好的库,你要 socket 什么的都是没有的。不过日后实现看情况可以往上加,你也可以来 pull request 哦。
  7. 如果有 issue 请在 github 上上传 issue。^_^

注:后来清理了项目,把无用的中文注释全都清理掉了。如果想看到代码细节的各种中文注释,请看这个 commit: https://github.com/wind2412/wind_jvm/tree/9113cb1af484f082f76c1668de3ca970a9c957f1

7258 次点击
所在节点    Java
32 条回复
wowo243
2018-02-05 20:58:20 +08:00
@wweir java 实现的 jvm?
Applenice
2018-02-05 20:59:59 +08:00
膜拜大佬,马一下
ERRORatDAY1
2018-02-05 21:07:15 +08:00
膜拜&马克
cmzy
2018-02-05 21:29:26 +08:00
果然是 V2EX 出人才啊。
chocotan
2018-02-05 21:34:17 +08:00
这就是大佬
ylxb23
2018-02-05 22:02:50 +08:00
请收下我崇敬的眼神
Jerrymouse1
2018-02-05 22:09:16 +08:00
好强!!!
R0ckyY2
2018-02-06 04:21:00 +08:00
真牛逼啊
agostop
2018-02-06 09:14:34 +08:00
都想不通你们哪来这么多时间搞这些事情
guoyuchuan
2018-02-06 09:56:42 +08:00
双击 66666
kyokuheishin
2018-02-06 11:07:40 +08:00
dalao
kylix
2018-02-06 12:07:51 +08:00
先 666 再说

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

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

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

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

© 2021 V2EX