https://github.com/guxingke/mini-jvm
使用 JDK8 实现 JVM(Java Virtual Machine)
https://github.com/guxingke/mini-jvm
interpreter jvm jvm-bytecode jvm8
Last synced: 11 days ago
JSON representation
使用 JDK8 实现 JVM(Java Virtual Machine)
- Host: GitHub
- URL: https://github.com/guxingke/mini-jvm
- Owner: guxingke
- License: lgpl-3.0
- Created: 2019-10-07T10:25:11.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-07-31T09:21:59.000Z (over 1 year ago)
- Last Synced: 2025-03-28T06:03:24.779Z (18 days ago)
- Topics: interpreter, jvm, jvm-bytecode, jvm8
- Language: Java
- Homepage: https://jvm.guxingke.com/
- Size: 7.23 MB
- Stars: 714
- Watchers: 33
- Forks: 97
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-java - Mini JVM
README
# [Mini-jvm](https://jvm.guxingke.com)

------
使用 Java 8 实现 JVM## 特性
### 元循环(Metacircular)
mini-jvm on mini-jvm on hotspot. 可以在 mini-jvm 里运行 mini-jvm .
```
$ java -jar jvm-core/target/mini-jvm.jar -jar jvm-core/target/mini-jvm.jar -jar test.jar
# Hello World!
```## 动机
1. 尝试了解 JVM 原理, Learning by doing
2. 纸上得来终觉浅, 实践
3. 用简单的代码帮助 Javaer 理解 JVM## 快速体验 [Macos 用户]
### Hello world
```bash
brew tap guxingke/repo && brew install mini-jvmcat < 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]);
}
}
}
EOFjavac HelloWorld.java
# no args
mini-jvm HelloWold
# => hello# with program args
mini-jvm HelloWold hello mini-jvm
# => hello
# => mini-jvm# 输入 mini-jvm -help 了解更多.
```## 快速体验 [其他操作系统]
需要自行下载打包. [Dev](https://jvm.guxingke.com/#/dev)
## 规划
- Class 文件解析 90%
- 字节码执行 90%
- 类加载 90%
- 方法调用 90%
- 实例化 90%
- Native 方法 90%
- 异常处理 60%
- self-booting 70%## 局限
1. 不实现 GC
2. 不实现多线程## 变更记录
- 实现了元循环(Metacircular)
- 反射特性基本可用
- 增加简单的调试器 bin/jdb.
- 支持 Lambda 调用, closure, currying 可用.
- Hello World 级别可用## 个人记录
- [如何构建你自己的 JVM (2) Hello World](https://www.guxingke.com/how-to-build-your-own-jvm-3/)
- [如何构建你自己的 JVM (1) 解释器](https://www.guxingke.com/how-to-build-your-own-jvm-2/)
- [如何构建你自己的 JVM (0) 概述](https://www.guxingke.com/how-to-build-your-own-jvm-1/)
- [用 Java 实现一个简单的虚拟机 ?](https://www.guxingke.com/mini-jvm-intro/)## 建议
- 在JDK1.8.0_121环境下发现编译不过的情况,详情见[#25](https://github.com/guxingke/mini-jvm/issues/25),本项目的目的是学习JVM,为了项目足够小,清晰和易于理解,并不打算做各种适配工作,建议大家在MacOSX,Maven 3.3+,JDK 1.8.0_192+下学习;## 联系作者
微信群
加个人微信 `guxingke_`,备注 mini-jvm 拉你进群。
## 参考
- [The Java® Virtual Machine Specification](https://docs.oracle.com/javase/specs/jvms/se8/html/)
- [JVM 字节码从入门到精通](https://juejin.im/book/5c25811a6fb9a049ec6b23ee/)
- [自己动手写Java虚拟机](https://book.douban.com/subject/26802084/)## 其他
新项目地址 [mini-jvm_x](https://github.com/mini-mo/mini-jvm_x), 使用多种语言实现。