使用 Java 8 实现 JVM
- 尝试了解 JVM 原理, Learning by doing
- 纸上得来终觉浅, 实践
- 用简单的代码帮助 Javaer 理解 JVM
brew tap guxingke/repo && brew install mini-jvm
cat <<EOF > HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("hello");
return;
}
for(int i = 0; i < args.length; i ++) {
System.out.println(args[i]);
}
}
}
EOF
javac HelloWorld.java
# no args
mini-jvm HelloWold
# => hello
# with program args
mini-jvm HelloWold hello mini-jvm
# => hello
# => mini-jvm
# 输入 mini-jvm -help 了解更多.
cat <<EOF > Sum10.java
public class Sum10 {
public static void main(String[] args) {
int sum = sum10();
System.out.println(sum);
}
public static int sum10() {
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += i;
}
return sum;
}
}
EOF
javac Sum10.java
java Sum10
# => 55
# 生成类汇编语言
# mini-jvm --bc [classfile] [method]
mini-jvm --bc Sum10.class sum10 > sum10.bc
# 解释上一步生成的 sum10.bc
# mini-jvm -- [bytecode file]
mini-jvm -- sum10.bc
# => 55
# ================================
需要自行下载打包. Dev
- Class 文件解析 90%
- 字节码执行 90%
- 类加载 90%
- 方法调用 90%
- 实例化 90%
- native 方法 70%
- 异常处理 0%
- 多线程 0%
- self-booting 10%
- 不实现 GC
- 支持 Lambda 调用, closure, currying 可用.
- Hello World 级别可用