用Java实现JVM目录
第零章 用Java实现JVM之随便说点什么
第一章 用Java实现JVM之JVM的准备知识
第二章 用Java实现JVM之解析Class文件
第三章 用Java实现JVM之运行时数据区
第四章 用Java实现JVM之指令集和解释器
第五章 用Java实现JVM之类和对象
第六章 用Java实现JVM之方法调用
第七章 用Java实现JVM之数组和字符串
第八章 用Java实现JVM之本地方法调用
第九章 用Java实现JVM之异常处理
第十章 用Java实现JVM之结束
前言
之前一直觉得JVM是个神秘的东西,一直在用却不知道它具体的内部原理。后来看了《自己动手写Java虚拟机》这本书就跟着做了一遍,不过这本书用的是Go语言,自己也不熟,说到底还是在抄代码。就逐渐萌生了自己用自己熟悉的语言实现。还请大家不要介意语言本身。接下的实现也是基于这本书去实现的
一、为啥要写JVM?
关于为啥要自己写JVM,这个就是仁者见仁了。有人认为是重复造轮子没必要,但是对于我来说大概就是出于兴趣吧,还有就是希望对Java底层的运行原理有所了解。当然了也不可能实现完整的虚拟机,就实现一个简单的玩具,以便加深自己对Java这门语言的理解
代码地址:jjvm
二、什么是JVM
额,感觉这个是废话,能想到自己实现的JVM的人,不可能不知道什么是JVM,但还是简单说说吧
我们都知道,Java是一门跨平台语言,而跨平台的核心就是JVM。JVM为了更好的实现跨平台的特性采用了栈式架构(关于栈式架构和寄存器架构这边就不展开了,汗,其实我也不大清楚,只知道寄存器架构依赖于CPU,跟硬件耦合度高些。而栈式架构是基于操作栈的,本身对硬件没什么依赖,更有利于实现跨平台)。我们写的Java代码是不能直接运行的,而是得先编译成Class文件后再交给虚拟机去运行,而虚拟机的任务就是解析Class文件再去运行对应的指令达到预期的效果。其实不单单是Java语言,其他语言如果也能编译成Class文件,JVM也是能够识别并运行的
二、实现目标
JVM有很多知识,全部实现也不现实φ(>ω<*) ,这边就主要实现类加载器、运行时数据区、方法调用以及字节码解释器。至于内存分配和垃圾回收机制、JIT、多线程等目前还没有实现,后边有机会再看看
总结
这里主要参考的书籍有:《自己动手写Java虚拟机》、《Java虚拟机规范.Java SE 8版》、《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》。这篇文章作为JVM系列的开篇,就简单聊聊为什么要做JVM和实现JVM的哪些功能,之后的篇章开始具体了解以及实现一个简单的JVM,大纲也和 《自己动手写Java虚拟机》 一致。顺便立个flag,以后随缘更新吧(✪ω✪)