博客
关于我
我所知道JVM虚拟机之执行引擎
阅读量:208 次
发布时间:2019-02-28

本文共 1293 字,大约阅读时间需要 4 分钟。

前言

从本篇开始,我们将深入探讨Java虚拟机(JVM)的核心组成部分之一——执行引擎。通过这篇文章,读者将了解执行引擎的工作原理、Java代码的编译与执行过程,以及如何通过解释器和即时编译器(JIT)优化程序性能。

一、执行引擎概述

执行引擎是Java虚拟机(JVM)的核心组成部分之一。与物理机的执行引擎不同,JVM的执行引擎是软件实现的,能够自定义指令集,从而支持不被硬件直接支持的指令格式。

JVM的主要任务是将字节码转换为本地机器指令。字节码不能直接在操作系统上运行,因为它包含的是JVM识别的指令、符号表和其他辅助信息。因此,执行引擎的任务是将字节码指令解释或编译为对应平台的本地机器指令,充当将高级语言翻译为机器语言的译者。

二、Java代码编译和执行过程

Java程序的执行过程通常包括以下步骤:

  • 编译阶段:Java编译器(javac)将源代码编译成字节码文件。这是前端编译过程,与JVM无关。
  • 解释与即时编译阶段:JVM在运行时将字节码解释为本地机器指令,或通过即时编译器(JIT)将字节码直接编译为机器指令。
  • 三、机器码、指令、汇编语言

  • 机器码:一种仅由0和1组成的二进制指令,直接供CPU执行。
  • 指令:为了提高可读性,机器码被抽象为指令,如“mov”、“inc”等。不同硬件平台支持的指令集不同。
  • 汇编语言:通过助记符和地址符号进一步提高可读性,汇编语言需要翻译为机器指令后才能执行。
  • 四、字节码

    字节码是一种中间状态的二进制代码,需要直译器将其翻译为机器码。它与硬件环境无关,主要用于Java虚拟机。

    五、解释器

    解释器是JVM的核心组件,负责将字节码逐行解释为本地机器指令。这种方式避免了静态编译,实现了跨平台特性。

    六、JIT编译器

    JIT编译器(Just In Time Compiler)将字节码直接编译为机器码,以提升执行效率。HotSpot VM通常采用解释器和JIT编译器的混合模式,解释器用于快速启动,JIT用于高性能执行。

    七、HotSpotVM的执行方式

    HotSpot VM在运行时,解释器和JIT编译器协作,解释器首先发挥作用,随后JIT根据热点探测结果进行编译优化。

    八、案例分析

    在生产环境中,JVM的启动方式会影响性能。了解JIT和解释器的协作机制,有助于优化应用程序的启动和运行效率。

    九、JIT编译器相关概念

  • C1和C2编译器:C1编译器优化简单可靠,C2编译器进行深度优化。
  • 热点探测:通过计数器和回边计数器,确定哪些代码需要优化。
  • 十、HotSpotVM JIT分类

    HotSpot VM内置C1和C2编译器,支持根据需要选择编译器策略。

    十一、AOT编译器

    AOT编译器(Ahead of Time Compiler)将Java代码预编译为机器码,减少“第一次运行慢”问题,但需要为不同环境编译。

    十二、Graal编译器

    Graal编译器是HotSpot VM的新兴即时编译器,目标是超越C2编译器性能。


    本文通过对执行引擎、解释器、JIT编译器等关键技术的详细介绍,帮助读者理解Java虚拟机的运行机制及其性能优化方法。

    转载地址:http://mqzs.baihongyu.com/

    你可能感兴趣的文章
    Node.js高级编程:用Javascript构建可伸缩应用(1)1.1 介绍和安装-安装Node
    查看>>
    nodejs + socket.io 同时使用http 和 https
    查看>>
    NodeJS @kubernetes/client-node连接到kubernetes集群的方法
    查看>>
    NodeJS API简介
    查看>>
    Nodejs express 获取url参数,post参数的三种方式
    查看>>
    nodejs http小爬虫
    查看>>
    nodejs libararies
    查看>>
    nodejs npm常用命令
    查看>>
    nodejs npm常用命令
    查看>>
    Nodejs process.nextTick() 使用详解
    查看>>
    NodeJS yarn 或 npm如何切换淘宝或国外镜像源
    查看>>
    nodejs 中间件理解
    查看>>
    nodejs 创建HTTP服务器详解
    查看>>
    nodejs 发起 GET 请求示例和 POST 请求示例
    查看>>
    NodeJS 导入导出模块的方法( 代码演示 )
    查看>>
    nodejs 开发websocket 笔记
    查看>>
    nodejs 的 Buffer 详解
    查看>>
    NodeJS 的环境变量: 开发环境vs生产环境
    查看>>
    nodejs 读取xlsx文件内容
    查看>>
    nodejs 运行CMD命令
    查看>>