日期:2014-05-16  浏览次数:20365 次

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,可以解释简单的字节码,目前做的工作还很少,离真正可用还有相当的距离。