解释器的初始化
JNI_CreateJavaVM
|
|--> Threads::create_vm
|
|--> init_globals
|
|-->interpreter_init
|
|-->AbstractInterpreter::initialize
|
|-->TemplateTable::initialize
通常提到解释器的时候,对其实现都是这样一个印象:
一个解释器就是不断地读取当前的指令,然后是一个大的switch语句。
HotSpot的解释器和这个方法有所不同。HotSpot的解释器综合运用了传统的解释器技术和汇编技术。
所谓传统解释器技术,是指对于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
分享到:
相关推荐
《C语言解释器的实现与解释器模式解析》 在编程世界中,编译器和解释器是两种关键的工具,它们将高级编程语言转换为机器可以理解的指令。本篇我们将聚焦于“C语言解释器”的实现,以及在设计过程中所采用的“解释器...
在IT领域,编程语言的解释器是至关重要的工具,它能读取并执行特定语言编写的脚本。本文将深入探讨使用Delphi编程环境构建小型解释器的过程,以及相关的关键技术点。 首先,我们要理解“解释器模式”。这是一种设计...
标题中的“VBA程序解释器.rar”指的是包含VBA解释器的压缩文件,它可能是一个包含了用于执行VBA代码的组件或者工具。 在描述中提到的流程是安装并信任VBA组件的步骤,这是为了确保安全性和避免未知的宏病毒。在运行...
而“一个小巧的BASIC解释器的源代码”可能是另一个可供学习的资源,尽管它不是VBScript,但BASIC语言和VBScript有很多共同之处,理解BASIC解释器也能帮助理解VBScript的工作方式。 总的来说,通过深入研究和实践...
在本项目中,"cmm解释器大作业"是一个典型的计算机科学课程作业,涉及到了编译原理中的核心概念。这个作业旨在让学生通过实践理解并掌握词法分析、语法分析以及语义分析等编译器设计的关键步骤。武汉大学的这个实践...
这个“BASIC解释器的源代码”是一个小型的程序,它能够读取并执行用BASIC语法编写的基本指令。源代码是程序员可以直接理解和修改的计算机程序文本,这对于理解编译器和解释器的工作原理至关重要。 解释器和编译器是...
在这个“编译原理课程解释器构造Java源码”中,我们可以推测这是一个基于Java编程语言实现的解释器项目。Java是一种广泛应用的面向对象的编程语言,它的跨平台特性使得它成为构建各种软件工具的理想选择,包括解释器...
VBA(Visual Basic for Applications)程序解释器是Microsoft Office套件中的一个重要组成部分,它使得用户能够通过编程方式自定义和自动化各种Office应用程序,如Excel、Word、PowerPoint等。VBA解释器执行由用户...
`myshell` 是一个专为 Linux 操作系统设计的命令解释器,它扮演着用户与操作系统内核交互的桥梁角色。在 Linux 中,命令行界面(CLI)是通过命令解释器来工作的,用户输入的每一条指令都会被 `myshell` 解析并执行。...
四则运算解释器是一种计算机程序,它能够接收包含加、减、乘、除等四则运算的数学表达式,并按照既定的运算规则进行计算,给出最终的结果。在这个VB(Visual Basic)编写的四则运算解释器中,我们将探讨如何利用VB的...
在本文中,我们将深入探讨基于STM32微控制器的最精炼PLC(可编程逻辑控制器)解释器的核心算法源代码。STM32是意法半导体(STMicroelectronics)推出的一种广泛使用的ARM Cortex-M系列MCU,具有高性能、低功耗和丰富...
解释器模式是一种行为设计模式,它允许我们定义一个语言的语法,并提供一个解释器来解析该语言中的句子。在Java中实现解释器模式,我们可以创建一个抽象表达式接口,然后为每种特定的语法结构创建一个具体表达式类。...
在IT领域,尤其是在操作系统的世界里,命令解释器是不可或缺的一部分,尤其在Linux系统中更是如此。本文将深入探讨“命令解释器”这一主题,以及它在Linux中的应用,特别是涉及的“管道”和“重定向”功能。 命令...
**CMM解释器详解** CMM解释器是一个小型的编程语言解释器,它主要用于教学目的,帮助学生理解和实践编译原理。在这个项目中,我们将会深入探讨解释器的工作原理、设计思路以及实现过程。 首先,我们要理解什么是...
"鸿鹄论坛_h3c日志解释器"是一个专为H3C设备设计的日志解析工具,它为新手提供了极大的便利。本文将深入探讨这个工具及其在H3C网络设备管理中的应用。 首先,我们来了解一下H3C,全称是华为3Com,是一家专注于网络...
本篇将深入探讨“武汉大学国际软件学院解释器构造作业二——JAVACC的研究和应用”这一主题,该作业是国软06级解释器构造课程中的一份优秀作品,获得了96分的高分,并且是完全原创的成果。作者不仅实现了基础的解释器...
**Shell命令解释器**是Linux操作系统中的核心组件之一,它是一个用户与系统交互的界面,让用户能够通过输入命令来执行各种系统操作。在Linux的世界里,shell不仅是一个命令行接口,还是一个强大的脚本编程语言,允许...
"Swift编写的一个Logo解释器"是一个项目,它使用Swift来实现Logo编程语言的解释器。Logo是一种简单易学的编程语言,最初设计目的是为了教育初学者,特别是儿童,理解编程的基本概念。 Logo语言的特点之一是它的...
简单函数绘图语言解释器是一种计算机程序,它允许用户通过输入数学函数来绘制二维图形,如曲线、直线、抛物线等。这个程序是用古老的Visual C++ 6.0(简称VC6)编写的,这是一款经典的集成开发环境,尽管现在已经有...
**CMM解释器详解** CMM(可能代表一种特定的编程语言或中间表示)的完整解释器是一个软件工具,它能够读取CMM源代码,对其进行解析,然后执行其中的指令。这个解释器包含了几个关键组件,使得它成为一个功能齐全的...