jvm interpreter
解释器的初始化
JNI_CreateJavaVM
|
|--> Threads::create_vm
|
|--> init_globals
|
|-->interpreter_init
|
|-->AbstractInterpreter::initialize
|
|-->TemplateTable::initialize
一个解释器就是不断地读取当前的指令,然后是一个大的switch语句。
传统解释器技术,是指对于java的bytecode,仍是其处理的基本单位。但是对于每个bytecode
的实现,则是采用的汇编技术。
void TemplateTable::iconst(int value) {
transition(vtos, itos);
if (value == 0) {
__ xorl(eax, eax);
} else {
__ movl(eax, value);
}
}
TemplateTable是解释器对这种技术的一个称呼。每一个java bytecode对应一个Template,
所有的Template构成TemplateTable。
上面的代码就是iconst_<i>的实现。
有几点要注意
一、方法TemplateTable::iconst的实现和CPU相关。上面的代码实际上是intel CPU下的代码,
其位于:\hotspot\src\cpu\i486\vm\templateTable_i486.cpp
二、__ xorl(eax, eax); 中的 __ 是什么?
#define __ _masm->
所以 __ xorl(eax, eax); <==> _masm->xorl(eax, eax);
而_masm的定义是 static InterpreterMacroAssembler* _masm; (templateTable.hpp line92)
三、InterpreterMacroAssembler的实现又是和CPU相关的。
InterpreterMacroAssembler的父类是:Assembler,它的实现也是和CPU相关的。
下面是xorl的一个实现
void Assembler::xorl(Register dst, Register src) {
emit_arith(0x33, 0xC0, dst, src);
}
emit_arith的调用了emit_byte方法,而emit_byte的核心代码是:
inline void AbstractAssembler::emit_byte(int x) {
// ...
*(unsigned char*)_code_pos = (unsigned char)x;
_code_pos += sizeof(unsigned char);
// ...
}
其中的_code_pos是一个内存缓冲区。
0x33 0xC0对应的Intel汇编语言正是:xor eax, eax
分享到:
相关推荐
使用 Java 8 实现 JVM 特性 元循环(Metacircular) mini-jvm on mini-jvm on hotspot. 可以在 mini-jvm 里运行 mini-jvm . $ java -jar jvm-core/target/mini-jvm.jar -jar jvm-core/target/mini-jvm.jar -jar test....
// Since the call stub sets up like the interpreter we call the from_interpreted
-bash: /usr/local/jdk/jdk1.8.0_181/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 安装完后 java -version 查看版本出现: 原因是:没有那个文件或目录,找了很久发现需要...
想法:通过在自己的进程中运行每个解释器并通过 RPC 与服务器通信,将 ZeppelinServer JVM 进程与解释器实例解耦。 状态:阿尔法 当前的 PoC 包括: zeppelin-mock-jave Thrift 客户端,产生 Interperter 进程 ...
kpspemu 目前在Kotlin通用平台中完成了PSP模拟器,目前Korge针对JVM和JS从源代码运行: JVM: ./gradlew runApp JS: ./gradlew compileKotlin2Js && http-server kpspemu/js/web 或者打开build.gradle用的IntelliJ...
python-jvm-interpreter是Python中Java虚拟机的实现。 它通过解析和解释Java类文件来工作。 依存关系 为了将Java代码编译为Java Bytecode,您将需要具有javac 。 如果您只想运行已编译的字节码,则只需一个Python...
仁津 Renjin是的基于JVM的解释器。 该项目的主要目标是提供一种现代的解释器,以代替GNU R,但更易于与其他系统集成,提供更好的性能,并且具有更好的可扩展性。 有关更多信息,请访问 。安装独立的人人发行版可用于...
1 字字字生生生生生生生生(HIR)分分分分分分分生生生字上上上上上上上上JVM怎怎怎template interpreter来来生字字字来来分字来来来,但但但
java源码调试Java子集编译器调试器 我的CSC 413软件开发课程的Java子集的编译器。 完全由Java构建的项目,通过对源...interpreter.jar -d factorial 要在解释器模式下运行: java -jar interpreter.jar factorial.x.cod
Coverage includes * Getting started quickly with Scala's interpreter, syntax, tools, and unique idioms * Mastering core language features: functions, arrays, maps, tuples, packages, imports, ...
• Drops the chapter on integrating a JVM-based scripting language, as the chapter was too old, and embedding a language interpreter raises security issues • Drops the chapter on implementing a ...
Rascal-元编程语言 这是Rascal元编程语言的核心实现。 它包含解释器,解析器生成器,解析器运行时,标准库,在线文档和类型检查器。 其他相关存储库: 在实践中使用了Rascal,但由于我们仍在改进该语言,因此我们...
如果您是通过其他途径来的,这里有一些关键链接可以帮助您入门: -了解此高性能企业级Java虚拟机(JVM)以及为什么我们认为您希望参与其开发。 为构建指令 , ,和-这里是你如何建立一个与的OpenJDK自己OpenJ9。 ...
一个目标是深入学习 JVM 规范,并尝试了解 Java 程序运行时的幕后行为。 此 VM 可用于教育目的,例如,用于有关如何为具有完整规范的语言设计运行时的课程。 我只参考“Java 虚拟机规范”,然后研究我们应该如何...
SimpleScript是一种受JavaScript / TypeScript和Go启发的静态类型应用程序编程语言,其目标是多种执行方法,从二进制可执行文件的AOT编译到流行的VM平台(如JVM / BEAM / WASM)到解释和JIT编译技术。 以下是其...
JVM上的Clojure 用GraalVM本机编译的Clojure ClojureScript,即使使用:advanced和(因此)JavaScript进行编译 使用sci的项目 Sci用于: 。 Clojure脚本编写工具,可与Bash很好地配合使用。 HTML模板CLI。 。 ...
NeoJam 的 macOS x86_64 精简移植版。配合 作个人研究之用。编译前置条件, 安装 Xcode 或者 Command Line Tools。编译安装 GNU Classpath参考 编译安装编译 NeoJam编译 classescd lib && ./build.sh && cd ../编译 ...
KiVM Kiva的Java虚拟机。产品特点JNI支持JAR类加载支持(需要libzip) 完全兼容OracleJDK / OpenJDK 复制垃圾收集器建立要求Linux,macOS或Windows(未试用)。 JDK(OpenJDK或OracleJDK)(> = 8) CMake(> = 3.2...
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...
5:解释( Interpreter) 可是机器也不能认识clas文件,还需要被解释器进行解释,机器才能最终理解我们所 要表达的东西 PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇...