jvm体系结构概述
各位读者好! 在本教程中,我们将了解和学习Java虚拟机(JVM)及其体系结构。 本教程将帮助您正确回答以下问题:
Java中的JVM是什么? JVM的不同组件 JVM,JRE和JDK之间的区别
1.简介
Java虚拟机(JVM)是驻留在您的计算机上的抽象虚拟机,并为Java字节码提供了运行时执行环境。 JVM可用于许多硬件和软件平台,但是很少有Java开发人员知道Java运行时环境(JRE)是Java虚拟机(JVM)的制定。 JVM分析字节码,对其进行解释,然后执行相同的字节码以显示输出。
JVM的基本功能是执行已编译的.class
文件(即字节码)并生成输出。请注意,每个操作系统都有不同的JVM,但是在所有操作系统上生成的字节码输出都是相同的。 这意味着在Windows操作系统上生成的字节码也可以在Linux操作系统上运行,反之亦然,从而使Java成为独立于平台的语言。
图1:Java虚拟机概述
1.1 JVM做什么?
Java虚拟机执行以下操作:
加载所需的.class
和jar文件
图2:JVM组件
1.2 Java虚拟机的类型
Java版本具有Java虚拟机(JVM)的两种不同实现,即
Java Hotspot Client VM:这是JDK 2.0运行时环境的默认虚拟机,并且通过减少应用程序启动时间和内存占用量进行了调整,以在客户端环境中运行应用程序时获得最佳性能。Java Hotspot Server VM:此虚拟机旨在提高程序执行速度,以便在服务器环境中运行应用程序。 通过使用服务器命令行选项来调用此虚拟机
1.3 JVM的内部架构
该图显示了符合JVM规范的Java虚拟机的关键内部组件。
图3:Java虚拟机架构
下面说明图3中所示的组件。
1.3.1类加载器
类加载器子系统用于加载/读取.class
文件,并将字节码保存在JVM方法区域中。 该子系统执行三个主要功能,即:
加载:此组件处理类的加载链接:此组件将验证生成的字节码并分配引用初始化:此组件将为静态变量分配其原始值并执行静态块
1.3.2运行时数据区
该子系统分为五个主要部分,即
方法区域:此组件保存每个.class
文件的类级别数据,例如元数据,常量运行时池,静态变量,方法的代码等。每个JVM只有一个方法区域,并且在所有类之间共享堆区:此组件是JVM内存的一部分,所有对象及其对应的实例变量和数组都存储在JVM内存中。 只有一个堆区域,并且在多个线程之间共享,因为该区域中存储的数据不是线程安全的堆栈区:该组件还是JVM内存的一部分,所有临时变量都存储在该内存中。 该区域具有堆栈帧,并为每个线程分配一个帧。 随着线程执行的完成,相应的帧也会被破坏。 堆栈区域是线程安全的,因为它不是共享资源,并且分为三个子实体,例如: 局部变量数组
该区域在方法调用和返回期间起着重要作用。
PC(程序计数器)寄存器:该组件保存当前正在执行的JVM指令的地址。 Java中的每个线程都有其自己的PC寄存器,以保存当前正在执行的指令的地址本机方法堆栈:此组件用另一种语言编写,并包含本机方法信息。 Java中的每个线程都有一个单独的本机方法堆栈
1.3.3执行引擎
该组件执行分配给运行时数据区域的字节码,并具有三个主要子组件,即:
解释器:此组件读取字节码指令并以顺序方式执行它们JIT(即时)编译器:该组件抵消了解释器执行缓慢的缺点,并提高了性能。 JIT编译器同时编译字节码的相似部分,从而减少了编译所需的总时间。 该组件中的编译器是指将JVM指令集转换为特定于OS的指令集的转换器垃圾收集:此组件是执行引擎的一部分,该引擎通过收集和删除未引用的对象来释放内存
图4:JVM中的执行引擎
1.3.4本机方法接口(JNI)
该组件是一个编程框架,允许Java代码调用库或本机应用程序(即特定于系统的硬件和OS的程序)或由其调用。
1.3.5本机方法库
该组件是执行引擎所需的本机C,C ++库的集合。
1.4 JVM与JRE与JDK
JDK,JRE和JVM是Java编程的三个重要关键字,许多开发人员未能将二者区分开。
Java虚拟机(JVM):JVM是一种虚拟机,为执行Java字节码提供了运行时环境Java运行时环境(JRE):JRE是一个在其中运行JVM的环境,并具有Java虚拟机在执行时使用的类库和其他文件。 换句话说,JRE = Java虚拟机(JVM)+运行该应用程序的库Java开发工具包(JDK):JDK是JRE的父集,具有JRE包含的所有内容以及开发工具,例如编译器,调试器等。换句话说,JDK = Java运行时环境(JRE)+开发工具
这是JVM,JRE和JDK的图形表示。
图5:JVM,JRE和JDK表示形式
1.5如何编译和执行Java类?
本节将演示Java类的编译和执行 。 让我们借助示例代码片段来了解此过程。
1.5.1创建Java文件
打开操作系统命令提示符,我们将使用“记事本”创建一个简单的Java类。 可以使用以下Java命令。
> notepad _sample_file_name_with_extension_
该命令提供以下输出。
图6:使用记事本创建Java文件
1.5.2编写示例Java代码
如图6所示,该命令将打开一个记事本,开发人员可以将示例代码添加到显示虚拟输出的Welcome.java
文件中。 示例代码如图7所示,成功执行后将显示问候消息。
图7:添加示例代码
1.5.3编译Java类
将代码保存在Welcome.java
文件中后,开发人员将需要对其进行编译。 该编译将生成Welcome.class
文件,该文件又将生成.class
文件。 要编译该文件,可以使用以下Java命令。
> javac _Java_file_name_with_extension_
该命令提供以下输出。
图8:编译文件
1.5.4执行Java类
现在,开发人员将需要执行生成的Welcome.class
文件以显示输出。 要执行该文件,可以使用以下Java命令。
> java _Compiled_file_name_with_extension_
该命令提供以下输出。
图9:执行文件
这就是这篇文章的全部内容。 学习愉快!
2.结论
在本教程中,我们对Java虚拟机(JVM)及其核心组件进行了概述。 本教程可以总结为:
JVM是执行Java代码并通过将Java字节码转换为机器语言来产生输出的虚拟机 JIT编译器是JVM的子组件,用于加快性能和执行时间 Java的执行速度很慢,原因是: 动态链接
但是,新的Java Development Kit( JDK )版本在一定程度上解决了这些瓶颈性能问题。 开发人员可以在“ 下载”部分中下载示例代码片段。
3.下载源代码
这是Java虚拟机(JVM)及其核心组件的概述教程。
下载
您可以在此处下载本教程的源代码:JVM_Example
翻译自: //04/jvm-architecture-overview-of-jvm-and-jvm-architecture.html
jvm体系结构概述