博客
关于我
我所知道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/

    你可能感兴趣的文章
    P3240 [HNOI2015]实验比较 树形DP
    查看>>
    P3950部落冲突
    查看>>
    P4313 文理分科
    查看>>
    SpringBoot中集成LiteFlow(轻量、快速、稳定可编排的组件式规则引擎)实现复杂业务解耦、动态编排、高可扩展
    查看>>
    SpringBoot中集成influxdb-java实现连接并操作Windows上安装配置的influxDB(时序数据库)
    查看>>
    P8738 [蓝桥杯 2020 国 C] 天干地支
    查看>>
    Package Header Cursor
    查看>>
    package,source folder,folder相互转换
    查看>>
    SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑
    查看>>
    package.json文件常用指令说明
    查看>>
    SpringBoot中集成eclipse.paho.client.mqttv3实现mqtt客户端并支持断线重连、线程池高并发改造、存储入库mqsql和redis示例业务流程,附资源下载
    查看>>
    Padding
    查看>>
    paddlehub安装及对口罩检测
    查看>>
    SpringBoot中集成Actuator实现监控系统运行状态
    查看>>
    PaddleSlim 模型量化 源代码解读
    查看>>
    paddle的两阶段基础算法基础
    查看>>
    Page Object模式:为什么它是Web自动化测试的必备工具
    查看>>
    SpringBoot中重写addCorsMapping解决跨域以及提示list them explicitly or consider using “allowedOriginPatterns“ in
    查看>>
    PageHelper 解析及实现原理
    查看>>
    pageHelper分页工具的使用
    查看>>