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

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
分享到:
评论

相关推荐

    JVM内存参数详解以及配置调优

    JVM 内部组件包括类装载器(ClassLoader)、内存管理(Memory Management)、诊断接口(Diagnostics Interface)和类解释器(Interpreter)。平台相关接口主要用于跨操作系统平台重用 JVM 代码。 内存管理 内存...

    JVM.rar_jvm

    3. 字节码解释器(Bytecode Interpreter):负责解析并执行字节码指令,它是JVM执行Java代码的起点。 4. JIT编译器(Just-In-Time Compiler):为了提升性能,JVM会在运行过程中将频繁执行的热点代码编译成本地机器...

    JVM_GC调优

    - 包括解释器(Interpreter)和即时编译器(JIT Compiler)两个主要组件。 3. **本地方法接口(Native Interface)** - 允许Java代码调用本地方法或C/C++等其他语言编写的代码。 4. **本地方法库(Native Method ...

    快速入门JVM

    3. **执行引擎(Execution Engine)**:解释器(Interpreter)和即时编译器(JIT Compiler)的组合体。解释器负责解释执行字节码,而JIT编译器则将热点代码编译成本地机器码,提高执行效率。 4. **本地接口(Native...

    IBM Java JVM Diagnostic Guide

    - **Interpreter**:解释执行Java字节码的组件。 - **Platform Port Layer**:将JVM连接到特定硬件平台的接口层。 ##### 第2章:理解垃圾收集器 - **内存管理概述**:解释了内存管理的基本概念,包括堆和非堆...

    简单了解JVM.pdf

    JVM使用解释器(interpreter)逐行解释执行字节码,但为了提高性能,它还包含JIT(Just-In-Time)编译器,JIT会动态编译频繁执行的代码段为本地机器代码,以提升执行效率。 垃圾回收(GC)是JVM管理内存的关键,它...

    mini-jvm:使用 JDK8 实现 JVM(Java Virtual Machine)

    使用 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....

    JVM 体系结构详解

    执行引擎可以通过解释器(Interpreter)以解释方式执行,也可以通过即时编译器(JIT Compiler)将字节码编译成本地代码执行,以提高效率。垃圾收集器(Garbage Collector)负责回收堆内存中不再使用的对象。 综上所...

    用Java实现一个简单的JVM.zip

    3. **字节码解释器(Bytecode Interpreter)**:读取并解释Java字节码,将其转化为机器可以理解的指令。 4. **垃圾收集器(Garbage Collector)**:自动管理堆内存,回收不再使用的对象,防止内存泄漏。 5. **执行...

    2020-review-7-jvm.pptx

    - **解释器**(Interpreter): 读取字节码并解释执行。这是 JVM 最基本的功能,允许 Java 代码能够在多种平台上运行。 - **即时编译器**(JIT Compiler): JIT 编译器的作用是在运行时将字节码编译成本地机器码,以...

    JVM基础教程

    - **ByteCode Interpreter**:解释执行字节码。 - **JIT Compiler**:即时编译器,分为客户端编译器(C1)和服务端编译器(C2)。 - **C1 (Client Compiler)**:轻量级编译器,适用于客户端应用,编译速度快,内存占用...

    [inside hotspot] 汇编模板解释器(Template Interpreter)和字节码执行1

    在Java虚拟机(JVM)中,HotSpot是广泛使用的JVM实现之一,它采用了多层解释器的设计来平衡性能与灵活性。HotSpot中的解释器部分主要负责执行字节码。根据提供的描述信息,HotSpot解释器主要包括两大部分:基于C++的...

    Java解释器源码-Basic-Interpreter:与Java中的Interpreter实现有关的我们项目的源代码和构建文件

    Java解释器是Java虚拟机(JVM)的重要组成部分,它负责将字节码指令转化为机器码,使得Java程序能够在各种操作系统上运行。本项目提供的"Basic-Interpreter"源码是针对Java解释器的一个基础实现,旨在帮助开发者深入...

    JVM:创建该项目是为了学习JVM上的内部事物。 它将包含示例代码,项目和一些阅读材料

    3. **字节码执行引擎(Bytecode Interpreter)**:解析并执行由类加载器加载的字节码指令。现代JVM还引入了Just-In-Time(JIT)编译器,将频繁执行的热点代码编译为本地机器码,提高性能。 4. **垃圾收集(Garbage ...

    java-interpreter

    Java解释器是Java编程语言的核心组成部分,它是Java虚拟机(JVM)的一部分,负责将编译后的Java字节码转化为机器可执行的指令。在Java的“Write Once, Run Anywhere”理念中,Java解释器扮演了关键角色,使得Java...

    Java软件开发实战 Java基础与案例开发详解 2-5 java虚拟机简介 共8页.pdf

    3. **解释器(Interpreter)**:负责解释并执行字节码。 #### 三、Java虚拟机的工作流程 Java程序的执行可以分为以下步骤: 1. **编写代码**:使用Java语言编写源代码。 2. **编译**:使用Java编译器将源代码编译成...

    Java虚拟机分析

    执行引擎则负责执行字节码指令,其中解释器(Interpreter)和即时编译器(Just-In-Time Compiler,JIT)是其关键组件;本地接口负责与操作系统交互;垃圾收集器负责回收不再使用的对象内存。 在研究Kaffe这个开源的...

    Pascal Interpreter in Java-开源

    Java虚拟机(JVM)使得Java程序能够在任何支持JVM的设备上运行,这为Pascal Interpreter in Java项目提供了坚实的运行基础。开发者可以利用Java丰富的类库和强大的面向对象特性来实现Pascal解释器,同时享受Java的...

    zeppelin-multiprocess-interpreter-poc:http 的 PoC

    想法:通过在自己的进程中运行每个解释器并通过 RPC 与服务器通信,将 ZeppelinServer JVM 进程与解释器实例解耦。 状态:阿尔法 当前的 PoC 包括: zeppelin-mock-jave Thrift 客户端,产生 Interperter 进程 ...

Global site tag (gtag.js) - Google Analytics