JVM 工作原理和即时编译(JIT)
目录
1、什么是虚拟机?
2、JVM 虚拟机简介
3、JVM 的工作原理
4、什么是即时编译(JIT)?
5、解释型语言和编译型语言的区别
6、为什么说 Java 是一种半编译半解释的语言?
1、什么是虚拟机?
虚拟机是一种运行在操作系统之上的软件程序,它模拟了一台计算机的硬件环境和操作系统功能,从而可以在其上运行应用程序。虚拟机的本质是在硬件层面和操作系统层面之上添加了一个抽象层,通过这个抽象层,应用程序可以直接在虚拟机上运行,而不需要关心底层硬件和操作系统的细节。
虚拟机有多种类型,包括:
- 操作系统级虚拟化:通过虚拟化技术将一台物理计算机分割成多个虚拟的计算机,每个虚拟计算机都运行着自己的操作系统和应用程序,互不干扰。
- 应用程序虚拟机:它是一种特殊的虚拟机,用于运行特定类型的应用程序,如 Java 虚拟机(JVM)用于运行 Java 应用程序,.NET 虚拟机用于运行 .NET 应用程序。
- 模拟器:它可以模拟一台完整的计算机系统,包括硬件和操作系统,可以运行任何类型的应用程序。
虚拟机的优点在于它可以实现跨平台和隔离性。跨平台是指应用程序可以在不同的操作系统和硬件平台上运行,而不需要重新编写或修改代码;隔离性是指虚拟机可以将应用程序隔离开来,从而提高应用程序的安全性和可靠性。虚拟机在云计算、虚拟化和容器化等领域都得到广泛的应用。
2、JVM 虚拟机简介
JVM(Java Virtual Machine,Java 虚拟机)是一个能够运行 Java 字节码的虚拟机,它是 Java 平台的核心组件之一。JVM 是跨平台的,可以在不同的操作系统上运行相同的 Java 应用程序,因为它提供了一个统一的运行环境。在运行 Java 应用程序时,首先需要将 Java 源代码编译成字节码,然后将字节码交给 JVM 执行。
JVM 主要由三部分组成:类加载器、运行时数据区和执行引擎。// JVM学习蓝图
(1)类加载器
类加载器是 JVM 的一个重要组成部分,它的主要作用是将字节码加载到 JVM 中并生成对应的类。类加载器按照层次结构进行组织,每个类加载器都有一个父类加载器,最顶层的类加载器是引导类加载器(Bootstrap ClassLoader),它是用本地代码实现的,主要负责加载 Java 核心类库。其他类加载器包括扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader)。// 双亲委派机制
(2)运行时数据区
运行时数据区是 JVM 运行时的内存区域,它包括以下几个部分:
- 程序计数器(Program Counter Register):保存了当前线程执行的字节码指令地址。
- Java 虚拟机栈(Java Virtual Machine Stacks):保存了线程执行方法的局部变量表、操作数栈、动态链接、方法出口等信息。
- 本地方法栈(Native Method Stack):保存了本地方法执行的信息。
- Java 堆(Java Heap):保存了对象实例和数组等动态分配的内存。
(3)执行引擎
执行引擎是 JVM 的核心组件之一,它的主要作用是执行字节码指令。执行引擎包括解释器和即时编译器(Just-In-Time Compiler,JIT)。解释器是将字节码指令解释为机器码逐条执行的方式,执行速度较慢;而 JIT 编译器是将字节码指令编译为本地机器码后再执行,执行速度更快。
JVM 还包括垃圾回收器、安全性管理器等组件,它们都是 JVM 的重要组成部分。JVM 为 Java 提供了跨平台、安全、高效的运行环境,是 Java 平台的核心技术之一。
3、JVM 的工作原理
JVM(Java虚拟机)是Java应用程序的运行环境,它的主要任务是将Java字节码解释或编译成机器指令,然后在计算机上运行。JVM的工作原理可以分为三个步骤:加载、解释/编译和执行。
加载:当Java应用程序启动时,JVM会加载应用程序所需的类和资源文件。类加载器会从本地文件系统、网络或其他位置加载类文件,然后将类文件存储在JVM的内存中。加载过程包括三个步骤:加载、连接和初始化。加载是指从磁盘读取字节码文件并将其存储在内存中;连接包括验证、准备和解析三个步骤,验证是确保字节码文件符合Java虚拟机规范的过程,准备是为类的静态变量分配内存并设置初始值,解析是将符号引用转换成直接引用的过程;初始化是为静态变量赋予正确的初始值,以及执行静态代码块中的语句。
解释/编译:JVM将Java字节码解释成机器指令,然后交给计算机处理。在解释过程中,JVM会逐条执行字节码指令,将其转换成机器指令,并将结果存储在堆栈中。解释是一种解释执行方式,速度较慢。JVM还可以使用即时编译(JIT)技术将字节码编译成本地代码,然后执行本地代码。编译可以提高程序的执行速度。
执行:执行是指将机器指令交给计算机处理的过程,计算机根据指令执行相应的操作。执行过程中,JVM会管理内存、线程、异常等方面的问题,以确保应用程序正常运行。
总的来说,JVM的工作原理是将Java字节码加载到内存中,然后解释或编译成机器指令,最后交给计算机处理。JVM还负责管理内存、线程和异常等问题,以确保Java应用程序的正常运行。
// 弄懂了JVM工作原理的每个详细步骤,也就弄懂了JVM虚拟机,后续的学习过程,无非就是解剖每个过程中的细节。
4、什么是即时编译(JIT)?
即时编译(Just-In-Time Compilation,JIT)是一种在程序运行时动态编译字节码为机器码的技术,可以显著提高 Java 程序的性能。下面对 JIT 技术进行详细解释:
Java 程序运行的基本流程:Java 程序是先编译成字节码文件(.class 文件),再由 Java 虚拟机(JVM)将字节码转换为机器码进行执行。在 Java 程序运行时,JVM 会将字节码文件加载到内存中,然后对字节码进行解释执行。
JIT 技术的作用:在解释执行字节码的过程中,由于每条指令都需要解释执行一遍,导致程序的运行效率比较低。而 JIT 技术可以在程序运行时,将经常被执行的字节码动态编译成机器码,再直接执行机器码,避免了反复解释执行的过程,从而提高了程序的运行效率。
JIT 技术的实现原理 JIT 技术的实现原理可以简单地概括为以下几个步骤:
- 首先,JVM 在程序运行时,会动态地收集程序的运行数据,例如哪些方法被调用频繁、哪些代码块经常被执行等等。
- 然后,JIT 技术会根据收集到的运行数据,对字节码进行分析和优化,将其中的热点代码(HotSpot)编译成机器码。
- 最后,JVM 将编译好的机器码保存到缓存中,以备下次使用。这样,下次运行时,就可以直接执行编译好的机器码,避免了反复解释执行的过程。
JIT 技术的优缺点:JIT 技术的主要优点是能够显著提高 Java 程序的性能,尤其是对于那些执行时间长、循环次数多的代码,优化效果更为明显。但是,JIT 技术也存在一些缺点,例如:
- JIT 技术需要消耗一定的内存空间来保存编译好的机器码,而且由于程序运行时动态编译的特性,可能会导致一些初始的性能损失。
- JIT 技术对于一些特殊的代码(例如反射、动态生成代码等)可能无法进行有效的优化,从而导致性能下降。
5、解释型语言和编译型语言的区别
解释型语言和编译型语言的主要区别在于它们如何执行代码。
编译型语言(如 C、C++、Java 等)将源代码转换为可执行代码的过程称为编译。编译器将源代码翻译成目标代码(二进制代码),并在运行之前将其编译成机器码。一旦编译完成,就可以直接运行目标代码,而无需重新编译。编译型语言的优点是速度快,因为在运行时不需要进行翻译或解释,但是需要对不同的平台进行重新编译,因此不够灵活。// 一次编译到处运行
解释型语言(如 Python、Ruby、JavaScript 等)则不需要编译器将代码转换为机器码。它们会逐行解释代码并在运行时进行翻译。解释型语言的优点是更具灵活性,因为它们可以在运行时对代码进行修改,但是执行速度通常比编译型语言慢,因为需要每次都进行翻译。// 一边解释一边执行
当然,还有一些语言是半编译半解释型语言,如 Java。它们使用编译器将源代码编译成字节码,然后使用解释器将字节码转换为机器码。这种机制使得 Java 应用程序具有高度的可移植性和跨平台性,同时也具有较高的执行效率。
6、为什么说 Java 是一种半编译半解释的语言?
Java 是一种半编译半解释的语言,它的编译器将 Java 代码编译成 Java 字节码,而不是机器码。Java 字节码是一种中间语言,可以在 Java 虚拟机(JVM)上运行。
在 Java 程序执行之前,Java 编译器将 Java 代码编译成字节码,并将其保存在 .class 文件中。这个过程被称为编译。当 Java 程序运行时,JVM 将字节码加载到内存中,并将其转换为机器码,这个过程被称为解释。// Java文件->字节码文件->机器码
Java 的半编译半解释的特性使得 Java 具有跨平台性。由于 Java 程序不会直接编译成机器码,而是编译成中间代码,因此 Java 应用程序可以在任何平台上运行,只要该平台上有一个能够解释 Java 字节码的 JVM。这种机制使得 Java 应用程序具有高度的可移植性和跨平台性。
JVM 工作原理和即时编译(JIT)相关推荐
- java的两种运行机制_Java☞JVM工作原理
参考博客:1 2 3 JVM工作原理 java虚拟机体系结构 Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这个平 ...
- JVM 工作原理和流程
转 Java 详解 JVM 工作原理和流程 <div class="article-info-box"><div class="article-bar- ...
- Jvm工作原理学习笔记(转)
2019独角兽企业重金招聘Python工程师标准>>> 一. JVM的生命周期 1. JVM实例对应了一个独立运行的java程序它是进程级别 a) ...
- 面试挂在JVM?别慌,图文讲解JVM工作原理,看完还不懂我跪键盘
本文转载自:面试挂在JVM?别慌,图文讲解JVM工作原理,看完还不懂我跪键盘 JDK,JRE,JVM的联系是啥? JVM Java Virtual Machine JDK Java Developme ...
- JVM工作原理和特点
JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界 ...
- java 及时编译_Java 面试-即时编译( JIT )
当我们在写代码时,一个方法内部的行数自然是越少越好,这样逻辑清晰.方便阅读,其实好处远不止如此,通过即时编译,甚至可以提高执行时的性能,今天就让我们好好来了解一下其中的原理. 简介 当 JVM 的初始 ...
- Java 内存管理、JVM 工作原理与 Java 运行时系统
Java 虚拟机规范中说明:所有的对象实例(all class instances)以及数组都要在堆上分配: the heap is the runtime data area from which ...
- Java 详解 JVM 工作原理和流程
2019独角兽企业重金招聘Python工程师标准>>> 作为一名Java使用者,掌握JVM的体系结构也是必须的. 说起Java,人们首先想到的是Java编程语言,然而事实上,Java ...
- java开发流程图_Java 详解 JVM 工作原理和流程
作为一名Java使用者,掌握JVM的体系结构也是必须的. 说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java ...
最新文章
- java arraylist json_java Arraylist转json 对象转json
- 一起再看执行上下文/作用域链/原型链
- 如何将低版本的myeclipse改造成可以使用servlet3.0的神器
- oracle rac scan ip 用途 原理
- STM32高级开发(12)-在GCC中使用printf打印串口数据
- share-Nothing原理
- 推荐系统知识梳理——矩阵分解
- ajax php 错误提示,php – jQuery AJAX错误处理
- python运行空白_解决pyecharts运行后产生的html文件用浏览器打开空白
- mybatis和mybatis-plus存读数据库中的对象(对象转json与json转对象)
- XML语言以及DTD的详解(方立勋javaweb)
- 储存卡格式化怎么恢复?给力的操作!
- systemtap工具使用介绍
- 用google突破图书馆入口IP限制小技巧
- 怎么用计算机进行曲线拟合,excel怎么进行曲线拟合 excel曲线拟合图文教程
- Redis 按关键字批量删除
- JavaScript——自动播放幻灯片效果
- php+三码合一,三码合一,解决php mysql乱码
- 使用threejs实现3D全景漫游
- trafficserver 服务搭建
热门文章
- RK3288_Android_8.1_定频关机
- Centos7 ceph集群安装 cephfs客户端挂载 java代码调用
- IDEA-Translation3.0插件右键无文档翻译解决
- C#入门练习题(1-7例)
- WaveDrom的使用
- html中文字的间距css属性
- 微信小程序-实现分享(带参数)
- 代数方程模型——量纲分析
- catkin_make时出现‘CV_RETR_TREE’ was not declared in this scope
- 中国互联网络信息中心域名争议解决办法