解释器的初始化
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
分享到:
相关推荐
JVM 内部组件包括类装载器(ClassLoader)、内存管理(Memory Management)、诊断接口(Diagnostics Interface)和类解释器(Interpreter)。平台相关接口主要用于跨操作系统平台重用 JVM 代码。 内存管理 内存...
3. 字节码解释器(Bytecode Interpreter):负责解析并执行字节码指令,它是JVM执行Java代码的起点。 4. JIT编译器(Just-In-Time Compiler):为了提升性能,JVM会在运行过程中将频繁执行的热点代码编译成本地机器...
- 包括解释器(Interpreter)和即时编译器(JIT Compiler)两个主要组件。 3. **本地方法接口(Native Interface)** - 允许Java代码调用本地方法或C/C++等其他语言编写的代码。 4. **本地方法库(Native Method ...
3. **执行引擎(Execution Engine)**:解释器(Interpreter)和即时编译器(JIT Compiler)的组合体。解释器负责解释执行字节码,而JIT编译器则将热点代码编译成本地机器码,提高执行效率。 4. **本地接口(Native...
- **Interpreter**:解释执行Java字节码的组件。 - **Platform Port Layer**:将JVM连接到特定硬件平台的接口层。 ##### 第2章:理解垃圾收集器 - **内存管理概述**:解释了内存管理的基本概念,包括堆和非堆...
JVM使用解释器(interpreter)逐行解释执行字节码,但为了提高性能,它还包含JIT(Just-In-Time)编译器,JIT会动态编译频繁执行的代码段为本地机器代码,以提升执行效率。 垃圾回收(GC)是JVM管理内存的关键,它...
使用 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....
执行引擎可以通过解释器(Interpreter)以解释方式执行,也可以通过即时编译器(JIT Compiler)将字节码编译成本地代码执行,以提高效率。垃圾收集器(Garbage Collector)负责回收堆内存中不再使用的对象。 综上所...
3. **字节码解释器(Bytecode Interpreter)**:读取并解释Java字节码,将其转化为机器可以理解的指令。 4. **垃圾收集器(Garbage Collector)**:自动管理堆内存,回收不再使用的对象,防止内存泄漏。 5. **执行...
- **解释器**(Interpreter): 读取字节码并解释执行。这是 JVM 最基本的功能,允许 Java 代码能够在多种平台上运行。 - **即时编译器**(JIT Compiler): JIT 编译器的作用是在运行时将字节码编译成本地机器码,以...
- **ByteCode Interpreter**:解释执行字节码。 - **JIT Compiler**:即时编译器,分为客户端编译器(C1)和服务端编译器(C2)。 - **C1 (Client Compiler)**:轻量级编译器,适用于客户端应用,编译速度快,内存占用...
在Java虚拟机(JVM)中,HotSpot是广泛使用的JVM实现之一,它采用了多层解释器的设计来平衡性能与灵活性。HotSpot中的解释器部分主要负责执行字节码。根据提供的描述信息,HotSpot解释器主要包括两大部分:基于C++的...
Java解释器是Java虚拟机(JVM)的重要组成部分,它负责将字节码指令转化为机器码,使得Java程序能够在各种操作系统上运行。本项目提供的"Basic-Interpreter"源码是针对Java解释器的一个基础实现,旨在帮助开发者深入...
3. **字节码执行引擎(Bytecode Interpreter)**:解析并执行由类加载器加载的字节码指令。现代JVM还引入了Just-In-Time(JIT)编译器,将频繁执行的热点代码编译为本地机器码,提高性能。 4. **垃圾收集(Garbage ...
Java解释器是Java编程语言的核心组成部分,它是Java虚拟机(JVM)的一部分,负责将编译后的Java字节码转化为机器可执行的指令。在Java的“Write Once, Run Anywhere”理念中,Java解释器扮演了关键角色,使得Java...
3. **解释器(Interpreter)**:负责解释并执行字节码。 #### 三、Java虚拟机的工作流程 Java程序的执行可以分为以下步骤: 1. **编写代码**:使用Java语言编写源代码。 2. **编译**:使用Java编译器将源代码编译成...
执行引擎则负责执行字节码指令,其中解释器(Interpreter)和即时编译器(Just-In-Time Compiler,JIT)是其关键组件;本地接口负责与操作系统交互;垃圾收集器负责回收不再使用的对象内存。 在研究Kaffe这个开源的...
Java虚拟机(JVM)使得Java程序能够在任何支持JVM的设备上运行,这为Pascal Interpreter in Java项目提供了坚实的运行基础。开发者可以利用Java丰富的类库和强大的面向对象特性来实现Pascal解释器,同时享受Java的...
想法:通过在自己的进程中运行每个解释器并通过 RPC 与服务器通信,将 ZeppelinServer JVM 进程与解释器实例解耦。 状态:阿尔法 当前的 PoC 包括: zeppelin-mock-jave Thrift 客户端,产生 Interperter 进程 ...