当前位置:首页 > 科技  > 软件

JVM 架构—JVM 内部是如何工作的?

来源: 责编: 时间:2023-10-08 07:05:47 190观看
导读什么是虚拟机?JVM(Java Virtual Machine):它是一个引擎,为Java应用程序提供运行时环境,并负责转换通过编译(.java文件)生成的字节码(.class文件)。JVM 是 Java 运行时环境 (JRE) 的一部分。Java 应用程序称为 WORA(Write Once Ru

1YU28资讯网——每日最新资讯28at.com

什么是虚拟机?

JVM(Java Virtual Machine):它是一个引擎,为Java应用程序提供运行时环境,并负责转换通过编译(.java文件)生成的字节码(.class文件)。JVM 是 Java 运行时环境 (JRE) 的一部分。1YU28资讯网——每日最新资讯28at.com

1YU28资讯网——每日最新资讯28at.com

Java 应用程序称为 WORA(Write Once Run Anywhere)。这意味着程序员可以在一个系统上开发 Java 代码,并且可以期望它无需任何调整就可以在任何其他支持 Java 的系统上运行。由于 JVM,这一切都是可能的。1YU28资讯网——每日最新资讯28at.com

JVM 架构:

1YU28资讯网——每日最新资讯28at.com

JVM分为三个主要的子系统:

  • 类加载器
  • 运行时数据区(内存区)
  • 执行引擎

1、类加载器:

ClassLoader 是 Java 运行时环境 (JRE) 的一部分,可将 Java 类文件从文件系统、网络或任何其他来源动态加载到 Java 虚拟机中。它分为三个主要阶段:1YU28资讯网——每日最新资讯28at.com

  • 加载中
  • 链接
  • 初始化

1YU28资讯网——每日最新资讯28at.com

(1)加载:

是负责从各种资源(例如文件系统、jar 文件、网络套接字)将字节代码(.class 文件)加载到内存中的部分。1YU28资讯网——每日最新资讯28at.com

Load阶段涉及三种不同类型的ClassLoader:1YU28资讯网——每日最新资讯28at.com

  • Bootstrap Class Loader: 它加载 JDK 内部类。它加载rt.jar和其他核心类,例如 java.lang.* 包类。
  • 扩展类加载器: 它从 JDK 扩展目录加载类,通常是$JAVA_HOME/lib/ext目录。
  • 应用程序类加载器: 它从当前类路径加载类。我们可以在使用 -cp 或 -classpath 命令行选项调用程序时设置类路径。

ClassLoader 在 Java 中是如何工作的

1YU28资讯网——每日最新资讯28at.com

当JVM 请求一个类时,它通过传递类的完全分类名称来调用java.lang.ClassLoader 类的loadClass() 方法。loadClass() 方法调用 findLoadedClass() 方法来检查该类是否已经加载。需要避免多次加载类。1YU28资讯网——每日最新资讯28at.com

如果该类未加载,它将请求委托给父 ClassLoader 以加载该类。如果 ClassLoader 没有找到类,它会调用 findClass() 方法在文件系统中查找类。下图显示了 ClassLoader 如何使用委托在 Java 中加载类。1YU28资讯网——每日最新资讯28at.com

假设我们有一个特定于应用程序的类 Student.class。加载此类文件的请求将传输到 Application ClassLoader。它委托给它的父扩展类加载器。此外,它委托给 Bootstrap ClassLoader。Bootstrap 在 rt.jar 中搜索该类,因为该类不存在。现在请求传输到 Extension ClassLoader,它搜索目录 jre/lib/ext 并尝试在其中找到此类。如果在此处找到该类,Extension ClassLoader 将加载该类。Application ClassLoader 从不加载该类。当扩展 ClassLoader 不加载它时,Application ClaasLoader 从 Java 中的 CLASSPATH 加载它。1YU28资讯网——每日最新资讯28at.com

可见性原则是说子ClassLoader可以看到父ClassLoader加载的类,反之则不然。这意味着如果 Application ClassLoader 加载 Student.class,在这种情况下,尝试使用 Extension ClassLoader 显式加载 Student.class 会抛出
java.lang.ClassNotFoundException。
1YU28资讯网——每日最新资讯28at.com

(2)链接:

主要分为三个阶段:1YU28资讯网——每日最新资讯28at.com

  • 验证:它确保.class文件(字节码)的正确性 ,即它检查此文件是否正确格式化并由有效的编译器生成,以及是否与 JVM 类规范兼容。如果验证失败,我们会得到运行时异常 java.lang.VerifyError。此活动由组件ByteCodeVerifier完成。完成此活动后,类文件就可以编译了。
  • 准备:准备包括为类或接口创建静态字段并将这些字段初始化为其默认值。这不需要执行任何 Java 虚拟机代码;静态字段的显式初始化程序作为初始化的一部分而不是准备执行。
  • Resolution:是从运行时常量池中的符号引用动态确定具体值的过程。

JVM 指令 anewarray、checkcast、getfield、getstatic、instanceof、invokedynamic、invokeinterface、invokespecial、invokestatic、invokevirtual、ldc、ldc_w、multiawarray、new、putfield 和 putstatic 对运行时常量池进行符号引用 。执行这些指令中的任何一条都需要解析其符号引用。1YU28资讯网——每日最新资讯28at.com

(3)初始化:

这是类加载的最后阶段,这里所有的静态变量都将被赋予原始值,并执行静态块。1YU28资讯网——每日最新资讯28at.com

2、运行时数据区:

(1)方法区(Method Area):

Java 虚拟机有一个 在所有 Java 虚拟机线程之间共享的方法区。方法区类似于常规语言的编译代码的存储区,或者类似于操作系统进程中的“文本”段。它存储每个类的结构,例如运行时常量池、字段和方法数据,以及方法和构造函数的代码,包括类和实例初始化以及接口初始化中使用的特殊方法。1YU28资讯网——每日最新资讯28at.com

  • 如果方法区中的内存无法满足分配请求,Java 虚拟机将抛出 OutOfMemoryError。

(2)堆(Heap):

Java 虚拟机有一个 在所有 Java 虚拟机线程之间共享的堆。堆是运行时数据区域,从中分配所有类实例和数组的内存。1YU28资讯网——每日最新资讯28at.com

堆是在虚拟机启动时创建的。对象的堆存储由自动存储管理系统(称为 垃圾收集器)回收;对象永远不会显式释放。Java 虚拟机没有假定特定类型的自动存储管理系统,可以根据实现者的系统要求选择存储管理技术。堆可以是固定大小的,也可以根据计算的需要进行扩展,如果不需要更大的堆,则可以收缩。堆的内存不需要是连续的。1YU28资讯网——每日最新资讯28at.com

Java 虚拟机实现可以让程序员或用户控制堆的初始大小,如果堆可以动态扩展或收缩,还可以控制最大和最小堆大小。1YU28资讯网——每日最新资讯28at.com

以下异常情况与堆相关联:1YU28资讯网——每日最新资讯28at.com

  • 如果计算需要的堆多于自动存储管理系统所能提供的堆,则 Java 虚拟机将抛出 OutOfMemoryError。

(3)堆栈(Stack):

每个 Java 虚拟机线程都有一个私有的 Java 虚拟机堆栈,与线程同时创建。Java 虚拟机堆栈存储帧。Java 虚拟机堆栈类似于 C 等常规语言的堆栈:它保存局部变量和部分结果,并在方法调用和返回中发挥作用。因为 Java 虚拟机堆栈从不直接操作,除了压入和弹出帧外,帧可能是堆分配的。Java 虚拟机堆栈的内存不需要是连续的。1YU28资讯网——每日最新资讯28at.com

在The Java® Virtual Machine Specification第一版中 ,Java 虚拟机堆栈被称为 Java 堆栈。1YU28资讯网——每日最新资讯28at.com

此规范允许 Java 虚拟机堆栈具有固定大小或根据计算需要动态扩展和收缩。如果 Java 虚拟机堆栈的大小是固定的,则每个 Java 虚拟机堆栈的大小可以在创建该堆栈时独立选择。1YU28资讯网——每日最新资讯28at.com

Java 虚拟机实现可以为程序员或用户提供对 Java 虚拟机堆栈初始大小的控制,以及在动态扩展或收缩 Java 虚拟机堆栈的情况下,对最大和最小大小的控制。1YU28资讯网——每日最新资讯28at.com

以下异常情况与 Java 虚拟机堆栈相关:1YU28资讯网——每日最新资讯28at.com

  • 如果线程中的计算需要比允许的更大的 Java 虚拟机堆栈,Java 虚拟机将抛出 StackOverflowError。
  • 如果 Java 虚拟机堆栈可以动态扩展,并且尝试扩展但没有足够的内存可用于实现扩展,或者如果没有足够的内存可用于为新线程创建初始 Java 虚拟机堆栈,则 Java 虚拟机机器抛出 OutOfMemoryError。

(4)PC注册(PC Register):

它存储当前执行的指令的地址。1YU28资讯网——每日最新资讯28at.com

(5)原生方法栈(Native Method Stack):

Native Method Stack 保存本地方法信息。对于每个线程,都会创建一个单独的本机方法堆栈。1YU28资讯网——每日最新资讯28at.com

3、执行引擎:

执行引擎通过执行每个类中存在的代码来处理此问题。但是,在执行程序之前,需要将字节码转换为机器语言指令。JVM 可以使用解释器或 JIT 编译器作为执行引擎。1YU28资讯网——每日最新资讯28at.com

1YU28资讯网——每日最新资讯28at.com

它可以分为三个部分:1YU28资讯网——每日最新资讯28at.com

解释器:解释器逐行读取并执行字节码指令。由于逐行执行,解释器相对较慢。1YU28资讯网——每日最新资讯28at.com

解释器的另一个缺点是当一个方法被多次调用时,每次都需要重新解释。1YU28资讯网——每日最新资讯28at.com

即时编译器(JIT) :用于提高解释器的效率。它编译整个字节码并将其更改为本地代码,因此每当解释器看到重复的方法调用时,JIT 会为该部分提供直接的本地代码,因此不需要重新解释,从而提高了效率。1YU28资讯网——每日最新资讯28at.com

垃圾收集器:它销毁未引用的对象。有关垃圾收集器的更多信息,请参阅 Java Garbage Collection Basics。1YU28资讯网——每日最新资讯28at.com

Java 本机接口 (JNI):

它是一个与本地方法库交互并提供执行所需的本地库(C、C++)的接口。它使 JVM 能够调用 C/C++ 库,并被可能特定于硬件的 C/C++ 库调用。1YU28资讯网——每日最新资讯28at.com

本机方法库:

它是执行引擎所需的本机库(C、C++)的集合。1YU28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12337-0.htmlJVM 架构—JVM 内部是如何工作的?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 一文浅谈Mockito使用

下一篇: 高频面试:Spring 如何解决循环依赖?

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • 一文看懂为苹果Vision Pro开发应用程序

    一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 如何正确使用:Has和:Nth-Last-Child

    如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 让我们一起聊聊文件的操作

    让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • 华为HarmonyOS 4.0将于8月4日发布 或搭载AI大模型技术

    华为HarmonyOS 4.0将于8月4日发布 或搭载AI大模型技术

    华为宣布HarmonyOS4.0将于8月4日正式发布。此前,华为已经针对开发者公布了HarmonyOS4.0,以便于开发者提前进行适配,也因此被曝光出了一些新系统的特性
  • 支持aptX Lossless无损传输 iQOO TWS 1赛道版发布限时优惠价369元

    支持aptX Lossless无损传输 iQOO TWS 1赛道版发布限时优惠价369元

    2023年7月4日,“无损音质,声动人心”iQOO TWS 1正式发布,支持aptX Lossless无损传输,限时优惠价369元。iQOO TWS 1耳机率先支持端到端aptX Lossless无
  • iQOO 11S或7月上市:搭载“鸡血版”骁龙8Gen2 史上最强5G Soc

    iQOO 11S或7月上市:搭载“鸡血版”骁龙8Gen2 史上最强5G Soc

    去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,iQOO 11不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞屏,同时在快充
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
Top