关于JVM和JDK

本文详细介绍了Java开发工具包(JDK)的构成,包括JRE、类库、编译器、调试器等,以及Java虚拟机(JVM)的作用和JDK与JVM的协同工作。此外,还对比了两者的关系和用途,适合初学者理解Java开发环境的构造。

什么是 Java 开发工具包?

image.png

Java Development Kit (JDK) 是一个跨平台的软件开发环境,它提供了开发基于 Java 的软件应用程序和小程序所需的工具和库的集合。它是 Java 中使用的核心包,与 JVM(Java 虚拟机)和 JRE(Java 运行时环境)一起使用。初学者经常对 JRE 和 JDK 感到困惑,如果您只对在您的机器上运行 Java 程序感兴趣,那么您可以使用 Java Runtime Environment 轻松完成。但是,如果您想开发基于 Java 的软件应用程序,那么与 JRE 一起您可能需要一些额外的必要工具,即 JDK。

JDK包含:

  • Java 运行时环境 (JRE):JDK 和 JRE 允许程序员创建可由 JRE 运行的核心 Java 程序,其中包含 JVM 和类库。
  • 类库:类库是一组动态可加载的库,Java 程序员可以在运行时访问它们。
  • 编译器 (javac):Javac 是该语言中的主要编译器。它是一个 Java 应用程序,它从开发人员那里获取文本文件并将它们转换为 Java 类文件。它是包含 Java 字节码的最常见的编译器输出类型。
  • 调试器:帮助开发人员测试和调试 Java 代码
  • JavaDoc:Sun Microsystems 创建了 JavaDoc,它是 Java 文档。它可用于从 HTML 文件中的源代码生成 API 文档。

JDK 中的 Java Runtime Environment 通常被称为 Private Runtime,因为它不同于普通的 JRE,并且包含额外的材料。 JDK Private Runtime 包括 JVM 和生产中使用的所有类库,以及对开发人员有益的其他库,例如国际化和 IDL 库。

一些最流行的 JDK 是:

  • Oracle JDK:最流行的JDK和Java11的主要发行商,
  • OpenJDK:准备使用:JDK 15、JDK 14 和 JMC,
  • Azul Systems Zing:适用于 Linux 操作系统的高效且低延迟的 JDK,
  • Azul Systems:基于 Zulu 品牌,适用于 Linux、Windows、Mac OS X、
  • IBM J9 JDK:适用于 AIX、Linux、Windows 和许多其他操作系统,
  • Amazon Corretto:免费构建 OpenJDK 和长期支持的最新选项。

什么是 JVM?

Java 虚拟机 (JVM) 是一种规范,它提供了一个运行时环境,可以在其中执行 Java 字节码。正如其名称所暗示的那样,JVM 用作“虚拟”机器或处理器。 Java 虚拟机 (JVM) 主要负责 Java 的平台独立性。因为 JVM 知道平台的特定指令长度和其他特性,所以这是可能的。 JVM 执行以下操作:

  • 代码已加载。
  • 检查代码
  • 代码被执行。

其他编程语言的编译器通常会为特定操作系统输出代码,而 Java 编译器只为 Java 虚拟机生成字节码。 Java 程序在 JVM 进程中作为线程执行。 JVM 负责加载、验证、解释和执行您的类文件。当您运行 java 之类的命令时,JVM 会加载该类的类定义并调用其 main 函数。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

JVM 包含:

  • 类加载器:这个子系统主要负责加载类文件。加载、链接和初始化是它的三个基本功能。
  • 方法区:它包含一个类结构,包括信息、Java 方法和一个常量运行时池。
  • 堆内存:堆存储所有对象、实例变量和数组。这个内存可以在多个线程中找到。
  • JVM 语言堆栈:JVM 语言中的堆栈存储局部变量及其部分结果。每个线程都有自己的 JVM 语言堆栈,它是与线程同时创建的。调用方法时会创建一个新框架,并在调用该方法后将其销毁。
  • PC 寄存器:PC 寄存器存储当前执行的 Java 虚拟机指令的地址。在 Java 中,每个线程都有自己的一组 PC 寄存器。
  • Native Method Stacks:Native Method Stacks - 本地代码指令存储在本地方法堆栈中,它依赖于本地库。它使用本机堆或任何类型的堆栈分配内存。
  • 执行引擎:它是一种用于测试硬件、软件或整个系统的软件。测试执行引擎永远不会存储有关被测试产品的数据。
  • Native Method 接口:这是一个称为 Native Method Interface 的编程框架。它使库和本机程序能够与在 JVM 中运行的 Java 代码进行交互。
  • 本机方法库:它是执行引擎所需的本机库(C、C++)的集合。

JDK 和 JVM 如何协同工作?

JDK 是 JRE 的超集,包含 JRE 的所有开发工具,例如编译器和调试器。为了运行 Java 小程序和应用程序,Java 运行时环境 (JRE) 包含库、Java 虚拟机 (JVM) 和其他组件。

JVM 是 JDK 和 JRE 的关键组件。无论您使用 JRE 还是 JDK 运行的 Java 应用程序都会进入负责逐行执行的 JVM。因此,它也被称为翻译器。三者之间的关系如下图所示。

JDK 与 JRE 与 JVM 比较表。

  • JDK 包括 JRE。
  • JRE 包括 JVM。
  • 但是,JDK 还包含 Java 运行时环境 (JRE)。不同之处在于前者有一些额外的工具和应用程序,如调试器或集成开发环境 (IDE),而后者用于在您的计算机上运行应用程序。您需要他们两个来充分享受使用 Java 的乐趣。
  • 此外,您还应该了解一件事:Sun Microsystems 在 2009 年收购 Oracle 的 OpenJDK 后,于 2010 年将其 Java Development Kit (JDK) 替换为它;因此,今天它们基本上是同一个东西——只是它们的创造者给的另一个名字!但是,这并不意味着您找不到它们之间的任何差异;例如:

Java 开发工具包 (JDK) 由三个组件组成:Java 运行时环境 (JRE)、Java 类库和 Java 编译器。

Java 开发工具包 (JDK) 由三个组件组成:Java 运行时环境 (JRE)、Java 类库和 Java 编译器。

JRE 是安装在计算机系统上并用于运行以 Java 编程语言编写的程序的软件组件。 JRE 可以作为单独的包或集成开发环境 (IDE) 的一部分从 Oracle 网站下载。

类库提供用于应用程序开发的类。

编译器通过一系列包括解析和编译的阶段,将用一种语言编写的源代码翻译成另一种语言的等效目标代码。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值