源码地址:https://pan.baidu.com/s/1Jj1H5uL3RLDzZARxFD0Bfw
提取码:68x7
2019.07.04更新
一、想法:
暑假闲着也是闲着,不如做一些有趣的事情,所以我决定做一个简易的java虚拟机。其实真的是心血来潮,因为几天前我在找关于java虚拟机学习资料的时候无意间发现了一本书——《自己动手写java虚拟机》。哇,手写jvm,这也太酷了吧(划重点)!于是我决定开坑也写一个jvm。当然要求不高,能打出Hello World,进行简单的累加运算,我就很开心了。当然啦我图样图森破,姿势水平不够,随时可能弃坑。
这篇博文就当做我的开发日志总目录吧。截止发布这篇文章前,还在进行.class文件字节码的解析工作。这还是肝了4天的成果,看来路漫漫啊。不管了,反正又不是什么课设作业。每天学习之余抽点时间码一下,等到下个暑假到来之前,应该能开发完的,吧。
二、参考资料:
1、《自己动手写java虚拟机》
2、《深入理解java虚拟机》
3、其他一些博主的博客
三、开发说明
1、开发语言——C++
《自己动手写java虚拟机》的作者用的是Go语言开发,讲了一些理由。我觉得他说得很有道理,然后选择了C++。主要是因为强迫症在作怪,觉得别人的jvm用C/C++写(当然C/C++效率高也是一个原因),我也要用。当然Go也是要掌握一点的,不然根本看不懂书,写不下去。
选择了C++,有一些Go语言提供的包是没有的,要自己想办法解决,无疑增加了不少难度
2、开发编译器——VC++6.0
由于电脑太渣,VS哪个版本都带不动,所以采用了VC++6.0来开发。由于不知道怎么分子文件夹,cpp文件和h文件都只能胡乱丢在工程文件夹下,每次去找dsp文件打开工程时就很蛋疼。这也表明了不能像《自己动手写java虚拟机》里面一样建一堆go文件。吐槽一下,在辣么多go文件里面看代码让我很崩溃。我觉得有些go文件应该合并在一起才对,而且我在后面开发中也确实这么做了。
3、开发方法——看书,看博客,参照Go语言版本的虚拟机
《自己动手写java虚拟机》的作者提供了go语言版本的虚拟机,这给我提供了一个参考:通过在一些代码里增加输出语句,可以直观了解工作过程。当然长者的人生经验也是很重要的,要多看书和博客,提高姿势水平。
---------------------------------------------------------分割线----------------------------------------------------------
开发日志:
一、classLoader.cpp开发(2019.06.27):
https://blog.csdn.net/qq_40636117/article/details/94394949
说明:这个文件用于加载搜索类文件(.class)并读取其中的字节码内容
二、classDecode.cpp开发(2019.06.30):
说明:根据.class格式,解析其中的字节码内容
1、https://blog.csdn.net/qq_40636117/article/details/94415960(解析基本信息及常量池)
2、https://blog.csdn.net/qq_40636117/article/details/94654292(解析属性池)
3、https://blog.csdn.net/qq_40636117/article/details/95618443(解析方法,字段表属性)
————————————————
版权声明:本文为CSDN博主「扬·索顿费斯」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40636117/article/details/94383044