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

    你可能感兴趣的文章
    PyQt 正确使用 emit() 和 pyqtSignal()
    查看>>
    PyQT-将文件复制到剪贴板
    查看>>
    PYQT.如何在QTableView中插入小部件
    查看>>
    PyQt4 代码在 PyQt5 (QHeaderView) 上不起作用
    查看>>
    PyQt4 到 PyQt5 ->mainFrame() 已弃用,需要修复才能加载网页
    查看>>
    PyQt4, class:mouseButtons用法
    查看>>
    PyQt4参考文档
    查看>>
    PyTorch Lightning:通过分布式训练扩展深度学习工作流
    查看>>
    PyQt5 - QThread:在线程仍在运行时被销毁
    查看>>
    PyQt5 - 如何从工作线程发出信号以通过 GUI 线程调用事件
    查看>>
    PyQt5 Designer 不工作:此应用程序无法启动,因为无法初始化 Qt 平台插件
    查看>>
    PyQt5 QLCNumber 没有更新
    查看>>
    PyQt5 TabWidget选项卡BarClicked TypeError:本机Qt信号不可调用
    查看>>
    PyQt5 从 PyQt4 转换信号代码
    查看>>
    PyQt5 和 asyncio:从永不完成的收益
    查看>>
    PyQt5 和 Django:如何使用 HTTP 请求(Multipart-form)上传图像?
    查看>>
    PyQt5 按钮运行功能和更新 LCD
    查看>>
    pyqt5 获取Qlabel中的图片并对其进行处理(包括Qimage转换为Mat)
    查看>>
    pyqt5 设置控件在最上层或者在下层
    查看>>
    pyqt5 设置网格布局的间距
    查看>>