JDK、JRE 和 JVM 的区别和联系

简介: JDK、JRE 和 JVM 的区别和联系

三者关系

就这三者的关系而言,jvm是jre的子集,jre是jdk的子集,具体关系如下图:

Java的执行流程

对于一个Java程序,其执行流程大致如下:

  1. 开发人员使用JDK编写和编译Java源代码,生成Java字节码文件(.class文件)。
  2. 在目标计算机上,通过命令行或集成开发环境(IDE)运行Java程序。此时,JVM会加载并执行Java字节码(.class文件)。
  3. JVM执行Java程序,按照程序的逻辑执行各个方法和语句,调用JRE中的类库。
  4. 在程序执行期间,JVM负责内存管理、垃圾回收,处理异常以及映射到本地系统。

下面是这三者的概念的具体解释

JDK(Java 开发工具包)

  1. Java 编译器(javac):用于将 Java 源代码文件(.java 文件)编译成 Java 字节码文件(.class 文件)的工具。这是将源代码转换为可执行程序的关键步骤。
  2. Java 虚拟机(JVM):JDK 包含 Java 虚拟机,它负责在计算机上执行 Java 字节码。JVM 是 Java 应用程序的运行时引擎,它负责加载字节码并将其转换为机器代码。
  3. Java 核心类库:JDK 包括了 Java 编程语言的核心类库,这些库包含了许多常用的类和方法,用于各种任务,如字符串处理、集合操作、文件操作、输入输出等。
  4. 开发工具:JDK 提供了各种开发工具,包括调试器(jdb)、文档生成工具(javadoc)、性能分析器、反编译器等,这些工具帮助开发人员编写、测试和优化 Java 代码。
  5. 头文件和开发库:JDK 包含了头文件和开发库,这些文件用于开发本机方法和与 Java 本机接口(JNI)相关的功能。这允许 Java 代码与本机库进行交互,从而扩展 Java 的功能。
  6. 示例代码和演示:JDK 包括一些示例代码和演示,这些示例帮助开发人员学习如何使用不同的 Java 类和库。
  7. API 文档:JDK 包括完整的 Java API 文档,可以在本地或在线访问。这些文档提供了有关 Java 类、方法和包的详细信息,以及示例代码和用法说明。
  8. 其他工具和实用程序:JDK 还包含其他实用工具和实用程序,如键库管理工具(keytool)用于管理数字证书和密钥库,以及部署工具用于将应用程序部署到服务器上。

JRE(Java 运行时环境)

  1. Java 虚拟机(JVM):JVM 是 JRE 的核心组件,它负责执行 Java 字节码并管理 Java 程序的运行时环境。
  2. 核心类库(Core Libraries):JRE 包括了一系列的核心类库,这些类库包含了 Java 编程语言的基本功能和工具。一些重要的核心库包括:
  • java.lang:提供了 Java 语言的基本类和异常处理机制。
  • java.util:包含各种实用工具类,例如集合框架(如 ArrayList、HashMap)和日期时间处理类。
  • java.io:用于输入和输出操作的类库,包括文件操作和流处理。
  • java.net:用于网络通信的类库,支持创建网络连接和数据传输。
  1. AWT 和 Swing(用户界面库):JRE 包括 Abstract Window Toolkit (AWT) 和 Swing,这些库用于创建图形用户界面(GUI)应用程序。它们提供了各种组件和工具,允许开发人员构建交互式的窗口应用程序。
  2. Java 核心包(Java API):JRE 还包括其他的 Java API,用于访问不同领域的功能和服务,如数据库访问(JDBC)、XML 处理(Java XML API)、安全性(Java Security API)等。
  3. Java 运行时支持:JRE 包括支持 Java 程序的运行时环境,包括内存管理、垃圾回收、线程管理等。这些组件保证了 Java 程序的稳定性和性能。
  4. 部分标准扩展(Optional Extensions):JRE 还可以包括一些可选的扩展,这些扩展提供了额外的功能,如 Java Naming and Directory Interface (JNDI)、Java Authentication and Authorization Service (JAAS) 等。这些扩展通常不是所有 JRE 实现的一部分,而是根据需要进行安装或配置。

JVM(Java 虚拟机)

  1. 类加载器(Class Loader)
  • 类加载器负责加载类文件并将其转换为 JVM 内部的数据结构。JVM 支持多个类加载器,包括启动类加载器、扩展类加载器和应用程序类加载器,它们按照不同的类路径加载类文件。
  1. 运行时数据区域(Runtime Data Areas)
  • JVM 包括多个运行时数据区域,用于存储程序执行期间所需的数据和信息。这些数据区域包括:
  • 方法区(Method Area):用于存储类的结构信息、静态变量、常量池等。
  • 堆(Heap):用于存储对象实例,包括由程序员创建的对象和Java虚拟机创建的对象(例如字符串池和类的实例)。
  • 虚拟机栈(Java Virtual Machine Stack):每个线程都有一个虚拟机栈,用于存储方法的局部变量和部分计算结果,以及用于方法调用和返回的操作。
  • 本地方法栈(Native Method Stack):类似于虚拟机栈,但用于本地方法(通过JNI接口调用的方法)的执行。
  • 程序计数器(Program Counter):用于指示当前线程正在执行的指令地址。
  1. 执行引擎(Execution Engine)
  • 执行引擎负责执行 Java 字节码。它包括解释器和即时编译器(JIT 编译器),可以将字节码转化为本地机器代码以提高执行速度。
  1. 本地接口(Native Interface)
  • JVM 提供了本地接口,允许 Java 程序与本地代码(如C/C++)进行交互。这通过 Java Native Interface(JNI)来实现。
  1. 本地方法库(Native Method Libraries)
  • JVM 包括一组本地方法库,这些库包含了 Java 标准库中的一些方法的本地实现,以及其他与底层操作系统和硬件相关的功能。
  1. 安全性和内存管理(Security and Memory Management)
  • JVM 负责内存管理,包括自动内存回收(垃圾回收)以释放不再使用的对象。它还实施了许多安全性功能,如类加载器安全性、访问控制和沙箱安全性。
  1. 多线程支持(Multithreading Support)
  • JVM 允许 Java 程序创建和管理多个线程,以便并发执行代码。
  1. 垃圾回收器(Garbage Collector)
  • 垃圾回收器是 JVM 的一部分,负责识别和回收不再被引用的对象,以释放内存空间。
目录
相关文章
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
762 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
|
存储 算法 Java
JvM JDK JRE 三者区别与联系详解
本文深入解析了Java编程中的三个核心概念:JVM(Java虚拟机)、JDK(Java开发工具包)和JRE(Java运行环境)。JVM是执行Java字节码的虚拟计算机,实现“一次编译,到处运行”;JDK包含JRE及开发工具,用于编写和调试Java程序;JRE负责运行已编译的Java程序。文章详细阐述了它们的功能、组成及应用场景,并通过实例说明其在实际开发中的作用,帮助开发者理解三者联系与区别,提升开发效率与问题解决能力。适合Java初学者及进阶开发者学习参考。
1769 3
|
监控 Oracle Java
JVM JDK JRE 使用指南及组件封装方法详解
本指南全面介绍了JVM、JDK、JRE的使用方法与Java组件封装技巧。内容涵盖JDK安装配置、JRE使用、JVM参数调优(如堆内存设置和垃圾回收器选择),以及类、包的封装实践。通过示例展示工具类与数据访问组件的封装方法,并讲解JAR包创建与发布流程。此外,还提供了常见问题解决方案,如内存溢出处理和依赖冲突管理。帮助开发者掌握高效、规范的Java开发技能,提升代码复用性和可维护性。附带面试资料供进一步学习。
520 0
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
1667 141
|
存储 Ubuntu 安全
在Ubuntu 16.04上安装openjdk-6/7/8-jdk的步骤
在整个安装过程中,你可能需要管理员权限,因此你可能要使用 `sudo` 来获取必要的权限。记得做完每一个步骤后,都要检查输出,以确保没有发生错误,并且每项操作都成功完成。如果在安装过程中遇到问题,查看 `/var/log/` 下的日志文件对于问题的解决可能是有帮助的。
807 21
|
IDE Ubuntu Java
在Ubuntu18.04安装兼容JDK 8的Eclipse集成开发环境的指南。
完成以上步骤后,您将在Ubuntu 18.04系统上成功安装并配置了Eclipse IDE,它将与JDK 8兼容,可以开始进行Java开发工作。如果遇到任何问题,请确保每一步骤都正确执行,并检查是否所有路径都与您的具体情况相匹配。
568 11
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
637 41
|
Oracle Java 关系型数据库
Tomcat和JDK的详细安装、下载和环境配置指南
以上就是JDK和Tomcat的下载、安装和环境配置的详细步骤。希望这个指南能帮助你顺利完成设置。
974 32
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
869 17
|
Ubuntu Java Android开发
在Ubuntu 18.04上安装与JDK 8兼容的Eclipse版本的步骤。
安装过程结束后,您就可以开始使用Eclipse来开发您的Java项目了,并且确保它与JDK 8兼容无误。这个过程涉及的是一个基本的安装流程,针对使用Java 8的用户,Eclipse的其他配置和插件安装根据个人开发环境和需求来定制。
617 0