目录

1、什么是虚拟机?

2、JVM 虚拟机简介

3、JVM 的工作原理

4、什么是即时编译(JIT)?

5、解释型语言和编译型语言的区别

6、为什么说 Java 是一种半编译半解释的语言?


1、什么是虚拟机?

虚拟机是一种运行在操作系统之上的软件程序,它模拟了一台计算机的硬件环境和操作系统功能,从而可以在其上运行应用程序。虚拟机的本质是在硬件层面和操作系统层面之上添加了一个抽象层,通过这个抽象层,应用程序可以直接在虚拟机上运行,而不需要关心底层硬件和操作系统的细节。

虚拟机有多种类型,包括:

  1. 操作系统级虚拟化:通过虚拟化技术将一台物理计算机分割成多个虚拟的计算机,每个虚拟计算机都运行着自己的操作系统和应用程序,互不干扰。
  2. 应用程序虚拟机:它是一种特殊的虚拟机,用于运行特定类型的应用程序,如 Java 虚拟机(JVM)用于运行 Java 应用程序,.NET 虚拟机用于运行 .NET 应用程序。
  3. 模拟器:它可以模拟一台完整的计算机系统,包括硬件和操作系统,可以运行任何类型的应用程序。

虚拟机的优点在于它可以实现跨平台和隔离性。跨平台是指应用程序可以在不同的操作系统和硬件平台上运行,而不需要重新编写或修改代码;隔离性是指虚拟机可以将应用程序隔离开来,从而提高应用程序的安全性和可靠性。虚拟机在云计算、虚拟化和容器化等领域都得到广泛的应用。

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的工作原理可以分为三个步骤:加载、解释/编译和执行。

  1. 加载:当Java应用程序启动时,JVM会加载应用程序所需的类和资源文件。类加载器会从本地文件系统、网络或其他位置加载类文件,然后将类文件存储在JVM的内存中。加载过程包括三个步骤:加载、连接和初始化。加载是指从磁盘读取字节码文件并将其存储在内存中;连接包括验证、准备和解析三个步骤,验证是确保字节码文件符合Java虚拟机规范的过程,准备是为类的静态变量分配内存并设置初始值,解析是将符号引用转换成直接引用的过程;初始化是为静态变量赋予正确的初始值,以及执行静态代码块中的语句。

  2. 解释/编译:JVM将Java字节码解释成机器指令,然后交给计算机处理。在解释过程中,JVM会逐条执行字节码指令,将其转换成机器指令,并将结果存储在堆栈中。解释是一种解释执行方式,速度较慢。JVM还可以使用即时编译(JIT)技术将字节码编译成本地代码,然后执行本地代码。编译可以提高程序的执行速度。

  3. 执行:执行是指将机器指令交给计算机处理的过程,计算机根据指令执行相应的操作。执行过程中,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 技术的实现原理可以简单地概括为以下几个步骤:

  1. 首先,JVM 在程序运行时,会动态地收集程序的运行数据,例如哪些方法被调用频繁、哪些代码块经常被执行等等。
  2. 然后,JIT 技术会根据收集到的运行数据,对字节码进行分析和优化,将其中的热点代码(HotSpot)编译成机器码。
  3. 最后,JVM 将编译好的机器码保存到缓存中,以备下次使用。这样,下次运行时,就可以直接执行编译好的机器码,避免了反复解释执行的过程。

JIT 技术的优缺点:JIT 技术的主要优点是能够显著提高 Java 程序的性能,尤其是对于那些执行时间长、循环次数多的代码,优化效果更为明显。但是,JIT 技术也存在一些缺点,例如:

  1. JIT 技术需要消耗一定的内存空间来保存编译好的机器码,而且由于程序运行时动态编译的特性,可能会导致一些初始的性能损失。
  2. 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)相关推荐

  1. java的两种运行机制_Java☞JVM工作原理

    参考博客:1 2 3 JVM工作原理 java虚拟机体系结构 Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这个平 ...

  2. JVM 工作原理和流程

    转 Java 详解 JVM 工作原理和流程 <div class="article-info-box"><div class="article-bar- ...

  3. Jvm工作原理学习笔记(转)

    2019独角兽企业重金招聘Python工程师标准>>> 一.         JVM的生命周期 1.       JVM实例对应了一个独立运行的java程序它是进程级别 a)     ...

  4. 面试挂在JVM?别慌,图文讲解JVM工作原理,看完还不懂我跪键盘

    本文转载自:面试挂在JVM?别慌,图文讲解JVM工作原理,看完还不懂我跪键盘 JDK,JRE,JVM的联系是啥? JVM Java Virtual Machine JDK Java Developme ...

  5. JVM工作原理和特点

    JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界 ...

  6. java 及时编译_Java 面试-即时编译( JIT )

    当我们在写代码时,一个方法内部的行数自然是越少越好,这样逻辑清晰.方便阅读,其实好处远不止如此,通过即时编译,甚至可以提高执行时的性能,今天就让我们好好来了解一下其中的原理. 简介 当 JVM 的初始 ...

  7. Java 内存管理、JVM 工作原理与 Java 运行时系统

    Java 虚拟机规范中说明:所有的对象实例(all class instances)以及数组都要在堆上分配: the heap is the runtime data area from which ...

  8. Java 详解 JVM 工作原理和流程

    2019独角兽企业重金招聘Python工程师标准>>> 作为一名Java使用者,掌握JVM的体系结构也是必须的. 说起Java,人们首先想到的是Java编程语言,然而事实上,Java ...

  9. java开发流程图_Java 详解 JVM 工作原理和流程

    作为一名Java使用者,掌握JVM的体系结构也是必须的. 说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java ...

最新文章

  1. java arraylist json_java Arraylist转json 对象转json
  2. 一起再看执行上下文/作用域链/原型链
  3. 如何将低版本的myeclipse改造成可以使用servlet3.0的神器
  4. oracle rac scan ip 用途 原理
  5. STM32高级开发(12)-在GCC中使用printf打印串口数据
  6. share-Nothing原理
  7. 推荐系统知识梳理——矩阵分解
  8. ajax php 错误提示,php – jQuery AJAX错误处理
  9. python运行空白_解决pyecharts运行后产生的html文件用浏览器打开空白
  10. mybatis和mybatis-plus存读数据库中的对象(对象转json与json转对象)
  11. XML语言以及DTD的详解(方立勋javaweb)
  12. 储存卡格式化怎么恢复?给力的操作!
  13. systemtap工具使用介绍
  14. 用google突破图书馆入口IP限制小技巧
  15. 怎么用计算机进行曲线拟合,excel怎么进行曲线拟合 excel曲线拟合图文教程
  16. Redis 按关键字批量删除
  17. JavaScript——自动播放幻灯片效果
  18. php+三码合一,三码合一,解决php mysql乱码
  19. 使用threejs实现3D全景漫游
  20. trafficserver 服务搭建

热门文章

  1. RK3288_Android_8.1_定频关机
  2. Centos7 ceph集群安装 cephfs客户端挂载 java代码调用
  3. IDEA-Translation3.0插件右键无文档翻译解决
  4. C#入门练习题(1-7例)
  5. WaveDrom的使用
  6. html中文字的间距css属性
  7. 微信小程序-实现分享(带参数)
  8. 代数方程模型——量纲分析
  9. catkin_make时出现‘CV_RETR_TREE’ was not declared in this scope
  10. 中国互联网络信息中心域名争议解决办法