Java虚拟机非常复杂,要想真正理解它的工作原理,最好的方式就是自己动手写一个。但是这个系列的定位还是入门,所以有很多的东西暂时都不会实现,比如 malloc,GC,多线程,native interface等。主要的目的还是在于大致了解JVM是一个什么样的东西,这也是我采用java来实现JVM的一个原因,便于理解。

由于我之前也实现过一个简单的可以执行汇编的模拟器,写这个对我来说不难,但是可能出现有些地方我认为理所当然,而刚接触的读者很难理解的情况。如果出现了,欢迎大家在原博客中评论。

下面是原始博客的地址:

https://lyldalek.notion.site/JVM-0x1-c142b76552cd406aad46ff0bd043eba6

该项目的地址:

https://github.com/aprz512/write-your-own-jvm

项目的完成度现在在90%左右了,运行一些简单的类是没有问题的,后面会慢慢扩展。

该系列的文章会对项目的代码进行详细的介绍。这个系列大致会分为下面几个部分,:

  1. 实现 classpath,暂时只兼容 windows,有兴趣参与进来的可以提pr
  2. 实现 class 文件的解析
  3. 实现运行时数据区
  4. 实现解释器,解释 method 中的指令
  5. 实现类与对象的支持
  6. 实现方法调用
  7. 实现数组
  8. 实现异常

该项目并不会去实现对象分配与内存管理,有兴趣的可以看看 csapp 的 malloc lab。

项目的参考资料: