JS实现的JVM源代码分析
JS实现的JVM源代码分析
从https://github.com/nurv/BicaVM下载源代码,源代码中
lib:使用的外部的库
runtime:java核心运行时(.class)
src:js源代码
webserver:python写的miniwebserver
1、src中的代码的基本信息:
preload.js:工具函数,方便加载别的js代码
long.jsjs实现的long数据结构
attributes.js对应.class文件的属性,用于处理符号表
auxiliarJNI.jsjavastring数据转成js格式
class.js加载解析.class文件(基于http),建立vm内部的数据结构
constantPool.js符号表数据结构
cpu.js模拟jvm
infos.jspublic?private?static?等属性信息
javaNativeInterface.js实现了一些原来在javaruntime中的函数
linearDatastream.js类似于C++的iostream的对IO的封装
main.js入口
nativeArray.jsjs实现的array
intrp.def字节码解释器,可以认为是此jvm的汇编器
2、入口:main()(main.js中)
3、主流程:run(cpu.js)依次加载验证javaruntime核心运行时(由java代码来提供),初始化主类,执行主函数
4、方法调用的解析过程(纯解释型的vm)invoke(infos.js)
5、操作栈的处理interpret(cpu.js)
6、字节码的解释执行intrp.def
概述:实现了一个demo,可以解释简单的字节码,目前做的工作还很少,离真正可用还有相当的距离。