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