• 【01】Java代码如何运行


    JRE: 包含Java虚拟机以及核心类库
    JDK: 同样包含了JRE,并且附带了一系列开发、诊断工具

    一、为什么Java要在虚拟机中运行

    一、 Java语言特性:高级、语法复杂、抽象
    Java语言-- 【编译器】 --> Java字节码 --【虚拟机】–> 实现

    二、 托管环境
    自动内存管理 & 垃圾回收

    二、虚拟机如何运行Java字节码

    2.1 虚拟机执行前的动作

    加载后的Java类会被存放于方法区中,实际运行时,虚拟机会执行方法区内的代码

    Created with Raphaël 2.3.0 编译生成class文件 加载至虚拟机 虚拟机执行字节码(class文件)

    从机器自身硬件视角看,Java字节码也无法直接执行,Java虚拟机需要将字节码翻译成机器码。

    2.2 虚拟机的动作

    翻译过程有两种形式:
    1.解释执行 逐条将字节码翻译成机器码并执行
    2.即使编译(JIT) 将一个方法中包含的所有字节码编译成机器码后再执行

    在这里插入图片描述

    两种翻译形式特点应用场景
    解释执行无需等待编译适用于大部分不常用代码(80%)
    即时编译实际运行速度快适用于小部分热点代码(20%)

    HotSpot 默认采用了混合模式,结合了二者的有点,它会先解释执行字节码,然后将其中反复执行的热点代码,以方法为单位进行即时编译。

    三、Java虚拟机的运行效率探讨

    理论上,即时编译后的Java程序的运行效率,是可能超过C++程序的,因为与静态编译相比,即时编译拥有程序的运行时信息。

    HotSpot 内置了多个即时编译器:C1(Client编译器,面向客户端GUI程序)、C2(Server编译器,面向服务器端成需) 和 Graal

    Java7开始,HotSpot 采用分层编译的方式 热点方法首先被C1编译,然后热点方法中的热点会进一步被C2编译

    在计算资源充足的情况下,字节码的解释执行和即时编译执行可同时进行,编译完成后的机器码会在下次调用该方法时启用,以替换原本的解释执行

    ![image.png-51.5kB][1]

  • 相关阅读:
    安防综合管理系统EasyCVR平台GA/T1400视图库:基于XML的消息体格式
    Linux基础复习及常用命令的使用
    AI智能电话机器人实用吗
    springBoot异步线程,父子线程数据传递的5种姿势
    658. 找到 K 个最接近的元素
    js基础笔记学习98-函数this得指向1
    且看五年开发码农,如何备战仨月硬刚字节面试官,轻松拿offer
    手边酒店V2独立版小程序 1.0.21 免授权+小程序前端
    MySQL----事务transaction
    1、深入理解Java线程
  • 原文地址:https://blog.csdn.net/dyf4281/article/details/140061343