这是一个Java实现的简陋的JVM,主要为了巩固学习JVM原理。
看完《深入理解Java虚拟机(第2版)》和《自己动手写Java虚拟机》,觉得自己也应该抄写一个Java虚拟机。一方面巩固所学,一方面深入细节温故知新。
开发过程中需查看class
字节码,用到了classpy,很好用,还顺手改了两个bug ~
在执行单元测试或者运行时,修改logback-test.xml
或者 logback.xml
等级为DEBUG,可以输出运行过程中执行的操作码和操作数,以及虚拟机栈的操作数栈和本地变量表的内容变化,便于理解和调试。
mvn clean package
mvn clean test
# Example
java -jar target/reimu-0.1.0.jar -cp target/test-classes com.github.hgaol.reimu.example.HelloWorld
如果觉得上面太长不好看,可以写个简单的小脚本,比如叫作reimu
,和reimu-0.1.0.jar
放在一起
#!/usr/bin/env bash
java -jar reimu-0.1.0.jar $@
这时候就可以直接./reimu -cp test-classes com.github.hgaol.reimu.example.HelloWorld
觉得还是写一写跑一跑理解的更好,心里更踏实一些~
为什么使用Java实现?因为比较熟悉,主要目的在于理解逻辑,其他阻碍越小越好。
SUMMARY是在写完代码之后对一些逻辑的梳理,主要是防止时间长了自己都不知道自己写的啥~
- 多线程