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

    你可能感兴趣的文章
    Python“和“带整数的运算符
    查看>>
    Python“文件存在“制作目录时出错
    查看>>
    Python“文件存在“制作目录时出错
    查看>>
    Python、IMAP 和 GMail.将消息标记为已查看
    查看>>
    python一个一个获取迭代器的元素
    查看>>
    python一维数组 提取_python – 如何从numpy中的1维数组中提取零维切片
    查看>>
    python三大库之--numpy(一)
    查看>>
    python三大库之--numpy(二)
    查看>>
    python上的字无效字符_标识中的无效字符
    查看>>
    python下用decode和encode 中文转码
    查看>>
    Python下调用Linux的Shell命令
    查看>>
    Python接口自动化测试实战系列
    查看>>
    python下载_安装_配置_以及第一行python程序---python工作笔记009
    查看>>
    Python不协调机器人消息.内容
    查看>>
    Python与C#之间内存共享互传信息
    查看>>
    python与c语言混合编程_你试过C语言和Python一起混合编程吗?两者相加不是已经无敌了!...
    查看>>
    python与excel
    查看>>
    Python与Excel的完美邂逅:深入浅出,手把手教你轻松玩转Excel数据操作
    查看>>
    python与flask_Python编程中flask的简介与简单使用
    查看>>
    python与图灵机器人交互(WXPY版本)
    查看>>