最简单的jit实现
现在假设目标代码已经生成,要在执行引擎中进行执行,一种传统实现方式是:
while(true)
{
fetch_instruction(handle);// 有一次内存访问
switch(handle.opcode)
{
case Binary_Add:
move r0 arg1;
move r1 arg2;
call binary_add(); // 多一次跳转(相对于直接调用binary_add),cpu的cache用不上
break;
case Binary_sub:
move r2 arg1;
move r3 arg2;
call binary_sub();
break;
case Binary_mul:
move r4 arg1;
move r5 arg2;
call binary_mul();
break;
.
.
.
}
}
注意:简单起见,假设目标代码指令放在大数组中存储,binary_add之所以不直接映射为add指令是因为高级语言中,很多时候参数的类型在运行时才能确定。
与此不同的另外一种实现是:
指令数组中存放的是
move r0 arg1;
move r1 arg2;
call Binary_Add ,
move r2 arg1;
move r3 arg2;
call binary_sub,
...
在执行时,执行引擎直接在指令数组中顺序运行,这样的话
相比上面的实现,每次指令的执行少了一次fetch,少了一次调用跳转(可以利用cpu的cache),这种实现可以认为是最朴素的jit实现,
优点是速度加快(据说比上面的方式快了5倍),缺点是多用内存(move等操作要放在这个数组中)
分享到:
相关推荐
《MiniJavaVM——一个Java虚拟机的设计和实现》是一篇深度探讨Java虚拟机(JVM)实现原理的技术文章。在本文中,我们将深入理解MiniJavaVM的架构、设计思路以及其实现过程,这对于理解Java程序的运行机制和优化代码...
在提供的压缩包中,包含了整个编译器的源代码,读者可以详细研究每个部分的实现,理解如何将高级语言转化为计算机可执行的指令。这将是一个极好的学习机会,可以帮助你掌握编译技术,增强你的编程能力。
编译器将高级语言转换为低级的中间表示形式——字节码。例如,下面是一个简单的Java程序及其编译命令: ```java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello...
在这个过程中,编程语言的发展经历了几个重要的阶段:机器语言、汇编语言、高级语言以及面向对象的语言。 ##### 1.1.1 机器语言 机器语言是计算机最早使用的编程语言,其基本单位是二进制的“0”和“1”。这种语言...
Java作为一种高级编程语言,在互联网时代展现出了其独特的优势,成为一种广泛使用的编程工具。本章节将详细介绍Java语言的发展历程及其在互联网时代的巨大成功。 ##### 1.1.1 Java语言在互联网时代获得巨大成功 在...
这本书涵盖了编译器的基本概念、设计过程以及实现技术,旨在帮助读者理解如何将高级语言转化为机器可执行的代码。 1. **编译器基础**:编译器是计算机科学中的核心组件,它负责将高级编程语言(如C#、C++、Java)...
1. **计算机语言概述**:计算机语言分为低级语言(如机器语言和汇编语言)和高级语言(如C++、Java等)。高级语言又可以分为面向过程和面向对象的。低级语言直接对应于硬件,而高级语言则更易于理解和编写,需要通过...
Java是一种高级编程语言,自1995年由Sun Microsystems发布以来,迅速成为业界最广泛使用的编程语言之一。Java的主要特点如下: - **跨平台性**:Java代码可以在任何安装了Java虚拟机(JVM)的平台上运行,这一特性...
Java语言是一种广泛使用的高级编程语言,以其独特的特性获得了开发者们的青睐。标题中的“Java语言常用语一览”暗示我们将探讨Java的一些核心特点,这些特点不仅涵盖了语言的基础,还涉及到它的安全性、可移植性等多...
首先,编译器是连接高级语言和机器语言的桥梁。它主要由词法分析器、语法分析器、语义分析器、优化器和代码生成器等组件构成。词法分析器负责识别源代码中的词汇单元,如关键字、标识符、运算符等;语法分析器则解析...
例如,Java虚拟机的JIT(Just-In-Time)编译器,它在程序运行时将部分字节码编译为本地机器代码,以提高性能。还有现代的前端框架,如React,它们通过编译过程将JSX(JavaScript XML)转换为纯JavaScript,使开发者...
Java是一种广泛使用的高级编程语言,由James Gosling于1995年创立,最初是为了Web编程,特别是通过HotJava浏览器和applet实现。随着时间的推移,Java发展为涵盖从智能设备到大型企业级应用的Java 2平台,包括J2SE、...
2. 用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统,把源高级程序编译成为机器语言文件,翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。 Python 解释器种类 1. ...
在语言层面,Java 6.0增加了对动态语言的支持,引入了 invokedynamic 指令,这是Java虚拟机(JVM)的一个重大改变,为运行时绑定和脚本语言集成提供了基础。此外,枚举类型(enum)的增强使得枚举常量的使用更加安全...
Java通过JIT技术实现性能提升,使得程序运行更加高效。 11. Java的分布式和网络能力: Java的网络编程能力非常强大,内置对TCP/IP和URL的支持,使得网络编程变得非常方便。Java同样支持远程方法调用(RMI),这允许...
例如,在纯软件实现的JVM中,最简单的执行方式是一次性解释字节码。 #### JIT编译器 - **即时编译**: 为了提高性能,许多JVM实现了即时编译器(Just-In-Time Compiler, JIT),它可以在运行时将频繁执行的字节码编译...
- 高级语言进一步抽象化,接近人类自然语言,提高了编程效率。 - 包括C、C++、Java等多种语言。 4. **第四代:SQL语言** - SQL(Structured Query Language)主要用于数据库查询和管理。 - 是一种专门用于管理...
解释器广泛地存在于各种形式的虚拟机中,比如指令集仿真器、二进制翻译器、高级语言虚拟机等。相比于JIT,解释器无启动开销,通常用于初始阶段的运行并同时搜集热点。 解释器的实现方法: 简单的译码分派是通过...
4. **详细指令选择与机器依赖性优化**:在此阶段,编译器会选择最合适的机器指令来实现中间代码,并可能执行进一步的优化,如流水线调度、分支预测等,这些都是高度依赖于目标机器架构的。 5. **代码生成**:最终...