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,可以解释简单的字节码,目前做的工作还很少,离真正可用还有相当的距离。
分享到:
相关推荐
Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java...
Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java...
java6.0源码 Cucumber-JVM 是 Cucumber 的纯 Java 实现,支持以下编程语言: Clojure 常规 约克 Java JavaScript(Rhino 解释器) Python(Jython 解释器) Ruby(JRuby 解释器) Scala Cucumber-JVM 提供了以下运行...
kpspemu 目前在Kotlin通用平台中完成了PSP模拟器,目前Korge针对JVM和JS从源代码运行: JVM: ./gradlew runApp JS: ./gradlew compileKotlin2Js && http-server kpspemu/js/web 或者打开build.gradle用的IntelliJ...
实现,支持Kotlin / JS,Kotlin / Android,Kotlin / JVM和Kotlin / Native(macOS,Windows,Linux)。 该库具有对Java的一流支持,是Java开发的可行替代方案。 请参阅以获取更多详细信息。 在Kotlin,Java,...
NULL 博文链接:https://walleyekneel.iteye.com/blog/1023133
Vert.x是一个在JVM开发reactive应用的框架,可用于开发异步、可伸缩、高并发的Web...本文试图揭示Vert.x的线程模型的应用,通过源代码分析Vert.x如何使用线程池处理请求的,以及比较Netty和Vert.x使用线程池的异同。
java源码clj-uuid “UUID 的目的是使分布式系统能够在没有重要中央协调的情况下唯一地识别信息。” —— clj-uuid是一个 Clojure 库,用于生成和利用 UUID(通用唯一标识符),如 所述。 该库扩展了标准 Java UUID ...
DFT的matlab源代码这是将Java转换为Kotlin,然后转换为javascript以在浏览器中使用的分支。 是的,这有点疯狂,但似乎可行。 下面是来自原始java OregonDSP软件包的原始自述文件。 也可以通过NPM在[]处获得。 有关...
如果懂java的同学可以将其理解为js版本的jvm。 浏览器一般包括渲染器和js脚本引擎,以chrome浏览器为例,用的webkit内核的渲染器,V8的脚本引擎,而node.js用到了v8引擎。总而言之它就是一个js的运行环境,就好比...
所有基于Mirai Js的JavaScript插件必须遵循AGPL-v3协议开放源代码,详见 。 API可能随时变动,请保持更新! 特性 完整的 Mirai 面向 Java 的支持。 支持大部分 Kotlin Coroutine。 不完整的 。 灵活地加载外部库。 ...
java6string源码Kotlin 基础知识 Kotlin 语言的学习基础 我在学习 JetBrains 的 Hadi Hariri 的“Kotlin 编程简介”课程时的笔记 ...JVM ...JS ...JVM ...适用于任何类型应用程序(服务器、Web、桌面、...源代码 Customer.kt 中的
为了解决上面两个问题,我查看了Kendo UI的源代码,提取并改进了源代码。主要更改点及使用方法请看下面源代码。主要针对以上两点做了更改,只需要在grid定义columns时加上isExport或exportTemplate即可: 在导出...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...
中心 Panda Hub是用于基于Panda(+ JVM)...从源代码构建: $ git clone https://github.com/panda-lang/hub.git $ cd hub # hub-backend (lohalhost:8080) $ cd hub-backend && ./gradlew run # hub-frontend (loca
java俄罗斯框源码 Tern 是一种可选类型的面向对象语言,具有一流的函数和协程。 它从许多来源借用了概念和构造,包括 Swift、JavaScript、Java ...为了最大限度地减少启动时间,源代码的解析和组装是并行执行的。
首先需要说明的是,与通常意义上的编辑器不同,FCKeditor并不是一个需要安装的程序,或许说它是一个网页源代码更为贴切,所以,取而代之安装过程的是与网页源代码相集成的调用过程。 FCKeditor运行的环境是网页...
java源码CoFlows - 容器化的多语言运行时(互操作) 我们正在积极寻找贡献者、反馈和星星(请点击右上角的星星按钮) CoFlows CE(社区版)帮助开发人员使用各种语言(包括Python、Java、Scala、C#、F#、VB 和 ...
JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...