广西桂林建设局网站,wordpress能建什么网站,移动网站开发框架,青岛百度代理公司各位读者好#xff01; 在本教程中#xff0c;我们将了解和学习Java虚拟机#xff08;JVM#xff09;及其体系结构。 本教程将帮助您正确回答以下问题#xff1a; Java中的JVM是什么#xff1f; JVM的不同组件 JVM#xff0c;JRE和JDK之间的区别 1.简介 Java虚拟机 在本教程中我们将了解和学习Java虚拟机JVM及其体系结构。 本教程将帮助您正确回答以下问题 Java中的JVM是什么 JVM的不同组件 JVMJRE和JDK之间的区别 1.简介 Java虚拟机JVM是驻留在您的计算机上的抽象虚拟机并为Java字节码提供了运行时执行环境。 JVM可用于许多硬件和软件平台但是很少有Java开发人员知道Java运行时环境 JRE是Java虚拟机 JVM的制定。 JVM分析字节码对其进行解释然后执行相同的字节码以显示输出。 JVM的基本功能是执行已编译的.class文件即字节码并生成输出。 请注意 每个操作系统都有不同的JVM但是在所有操作系统上生成的字节码输出都是相同的。 这意味着在Windows操作系统上生成的字节码也可以在Linux操作系统上运行反之亦然从而使Java成为独立于平台的语言。 图1Java虚拟机概述 1.1 JVM有什么作用 Java虚拟机执行以下操作 加载所需的.class和jar文件 图2JVM组件 1.2 Java虚拟机的类型 Java版本具有Java虚拟机JVM的两种不同实现即 Java Hotspot Client VM 这是JDK 2.0运行时环境的默认虚拟机并通过减少应用程序启动时间和内存占用量进行了调整以在客户端环境中运行应用程序时获得最佳性能。 Java Hotspot Server VM 此虚拟机旨在提高程序执行速度以便在服务器环境中运行应用程序。 通过使用服务器命令行选项来调用此虚拟机 1.3 JVM的内部架构 该图显示了符合JVM规范的Java虚拟机的关键内部组件。 图3Java虚拟机架构 下面说明图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的指令集的转换器 垃圾收集 此组件是执行引擎的一部分该引擎通过收集和删除未引用的对象来释放内存 图4JVM中的执行引擎 1.3.4本机方法接口JNI 该组件是一个编程框架它允许Java代码调用库或本机应用程序即特定于系统的硬件和OS的程序或由其调用。 1.3.5本机方法库 该组件是执行引擎所需的本机CC 库的集合。 1.4 JVM与JRE与JDK JDKJRE和JVM是Java编程的三个重要关键字许多开发人员未能将二者区分开。 Java虚拟机JVM JVM是一种虚拟机为执行Java字节码提供了运行时环境 Java运行时环境JRE JRE是一个运行JVM的环境并具有Java虚拟机在执行时使用的类库和其他文件。 换句话说JRE Java虚拟机JVM运行该应用程序的库 Java开发工具包JDK JDK是JRE的父集具有JRE以及开发工具如编译器调试器等所包含的所有内容。换句话说JDK Java运行时环境JRE开发工具 这是JVMJRE和JDK的图形表示。 图5JVMJRE和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 翻译自: https://www.javacodegeeks.com/2018/04/jvm-architecture-overview-of-jvm-and-jvm-architecture.html