`
eric_weitm
  • 浏览: 243531 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

高级语言虚拟机最简单的jit实现

阅读更多
最简单的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虚拟机的设计和实现

    《MiniJavaVM——一个Java虚拟机的设计和实现》是一篇深度探讨Java虚拟机(JVM)实现原理的技术文章。在本文中,我们将深入理解MiniJavaVM的架构、设计思路以及其实现过程,这对于理解Java程序的运行机制和优化代码...

    C#做的simple语言简单编译器

    在提供的压缩包中,包含了整个编译器的源代码,读者可以详细研究每个部分的实现,理解如何将高级语言转化为计算机可执行的指令。这将是一个极好的学习机会,可以帮助你掌握编译技术,增强你的编程能力。

    探索Java虚拟机的心脏:字节码执行全解析

    编译器将高级语言转换为低级的中间表示形式——字节码。例如,下面是一个简单的Java程序及其编译命令: ```java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello...

    java虚拟机详解

    Sun JVM是早期最流行的JVM实现之一。它遵循JVM规范,并在此基础上提供了额外的功能和支持,例如高性能的执行引擎、丰富的垃圾回收算法等。 ##### 2.3 SUN JVM内存管理(优化) SUN JVM提供了多种内存管理和优化技术,...

    第1章 JAVA概述

    在这个过程中,编程语言的发展经历了几个重要的阶段:机器语言、汇编语言、高级语言以及面向对象的语言。 ##### 1.1.1 机器语言 机器语言是计算机最早使用的编程语言,其基本单位是二进制的“0”和“1”。这种语言...

    java语言概述

    Java作为一种高级编程语言,在互联网时代展现出了其独特的优势,成为一种广泛使用的编程工具。本章节将详细介绍Java语言的发展历程及其在互联网时代的巨大成功。 ##### 1.1.1 Java语言在互联网时代获得巨大成功 在...

    Compiler Construction Principles And Practice Chs

    这本书涵盖了编译器的基本概念、设计过程以及实现技术,旨在帮助读者理解如何将高级语言转化为机器可执行的代码。 1. **编译器基础**:编译器是计算机科学中的核心组件,它负责将高级编程语言(如C#、C++、Java)...

    Java课程设计

    1. **计算机语言概述**:计算机语言分为低级语言(如机器语言和汇编语言)和高级语言(如C++、Java等)。高级语言又可以分为面向过程和面向对象的。低级语言直接对应于硬件,而高级语言则更易于理解和编写,需要通过...

    java八股文.docx "Java八股文"通常指的是一种简单的模板化回答,用于解答关于Java编程语言的基础问题,特别是在面试

    Java是一种高级编程语言,自1995年由Sun Microsystems发布以来,迅速成为业界最广泛使用的编程语言之一。Java的主要特点如下: - **跨平台性**:Java代码可以在任何安装了Java虚拟机(JVM)的平台上运行,这一特性...

    Java语言常用语一览_.docx

    Java语言是一种广泛使用的高级编程语言,以其独特的特性获得了开发者们的青睐。标题中的“Java语言常用语一览”暗示我们将探讨Java的一些核心特点,这些特点不仅涵盖了语言的基础,还涉及到它的安全性、可移植性等多...

    编译程序设计:理论、工具与实例(java版)

    首先,编译器是连接高级语言和机器语言的桥梁。它主要由词法分析器、语法分析器、语义分析器、优化器和代码生成器等组件构成。词法分析器负责识别源代码中的词汇单元,如关键字、标识符、运算符等;语法分析器则解析...

    实用编译原理很实用 真的

    例如,Java虚拟机的JIT(Just-In-Time)编译器,它在程序运行时将部分字节码编译为本地机器代码,以提高性能。还有现代的前端框架,如React,它们通过编译过程将JSX(JavaScript XML)转换为纯JavaScript,使开发者...

    Java学习课件01

    Java是一种广泛使用的高级编程语言,由James Gosling于1995年创立,最初是为了Web编程,特别是通过HotJava浏览器和applet实现。随着时间的推移,Java发展为涵盖从智能设备到大型企业级应用的Java 2平台,包括J2SE、...

    Python 50 道面试题及答案.docx

    2. 用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统,把源高级程序编译成为机器语言文件,翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。 Python 解释器种类 1. ...

    Java 6.0中文参考手册(最新版).chm

    在语言层面,Java 6.0增加了对动态语言的支持,引入了 invokedynamic 指令,这是Java虚拟机(JVM)的一个重大改变,为运行时绑定和脚本语言集成提供了基础。此外,枚举类型(enum)的增强使得枚举常量的使用更加安全...

    java基础教程

    Java通过JIT技术实现性能提升,使得程序运行更加高效。 11. Java的分布式和网络能力: Java的网络编程能力非常强大,内置对TCP/IP和URL的支持,使得网络编程变得非常方便。Java同样支持远程方法调用(RMI),这允许...

    java核心.txt

    例如,在纯软件实现的JVM中,最简单的执行方式是一次性解释字节码。 #### JIT编译器 - **即时编译**: 为了提高性能,许多JVM实现了即时编译器(Just-In-Time Compiler, JIT),它可以在运行时将频繁执行的字节码编译...

    java入门基础1

    - 高级语言进一步抽象化,接近人类自然语言,提高了编程效率。 - 包括C、C++、Java等多种语言。 4. **第四代:SQL语言** - SQL(Structured Query Language)主要用于数据库查询和管理。 - 是一种专门用于管理...

    V8中HelloWorld的执行过程-part11

    解释器广泛地存在于各种形式的虚拟机中,比如指令集仿真器、二进制翻译器、高级语言虚拟机等。相比于JIT,解释器无启动开销,通常用于初始阶段的运行并同时搜集热点。 解释器的实现方法: 简单的译码分派是通过...

    计算机组成与设计2.15

    4. **详细指令选择与机器依赖性优化**:在此阶段,编译器会选择最合适的机器指令来实现中间代码,并可能执行进一步的优化,如流水线调度、分支预测等,这些都是高度依赖于目标机器架构的。 5. **代码生成**:最终...

Global site tag (gtag.js) - Google Analytics