JDK 与 JRE是什么(以及Java技术的核心部分JVM又是什么)它们之间的关系如何

一、JDK

1. 定义与功能
  • 定义:JDK是Java语言的软件开发工具包(Software Development Kit),它包含了Java的开发工具和运行环境。
  • 功能:JDK提供了编写、编译、调试Java程序所需的所有工具和资源,包括Java编译器(javac)、Java运行时环境(JRE)、Java调试器(jdb)以及大量的Java类库等。这些工具和资源使得Java程序员能够开发、测试和部署Java应用程序。
2. 组件
  • JDK的主要组件包括:
    • 编译器:将Java源代码(.java文件)编译成Java字节码(.class文件)。
    • 运行时环境:即JRE,用于运行编译后的Java程序。
    • 开发工具:如调试器、文档生成器等。
    • 类库:包括Java核心类库和第三方类库,为Java程序提供丰富的功能支持。
3. 面向对象
  • JDK主要面向Java开发人员,是开发Java应用程序的必备工具。
4. 安装与配置
  • 安装JDK时,通常也会安装JRE,因为JDK包含了JRE。
  • 安装完成后,需要设置环境变量(如PATH),以便在命令行中直接使用JDK提供的工具。

二、JRE

1. 定义与功能
  • 定义:JRE是Java程序的运行环境,它提供了运行Java程序所需的基础设施。
  • 功能:JRE包含了Java虚拟机(JVM)和Java核心类库,这些组件共同为Java程序提供了一个运行时环境。用户无需了解Java程序的编译过程,只需在安装了JRE的计算机上即可运行Java程序。
2. 组件
  • JRE的主要组件包括:
    • Java虚拟机(JVM):负责将Java字节码转换成计算机可以直接执行的机器码。
    • Java核心类库:提供了一系列Java程序运行所需的类和接口。
3. 面向对象
  • JRE主要面向普通用户或Java程序的使用者,他们不需要进行Java程序的开发或调试,只需运行Java程序即可。
4. 安装与配置
  • 如果只需要运行Java程序而不需要开发Java程序,可以只安装JRE。
  • 安装JRE时,无需设置复杂的环境变量,通常只需按照安装向导进行操作即可。

JVM是Java Virtual Machine(Java虚拟机)的缩写,是一个虚构的计算机,它通过在实际计算机上仿真模拟各种计算机功能来实现其运行。JVM是Java技术的核心部分,使得Java程序能够"一次编写,到处运行"(Write Once, Run Anywhere, WORA)。以下是关于JVM的详细解析:

三、JVM

1、JVM的定义与功能
  • 定义:JVM是一个能够执行Java字节码(.class文件)的虚拟计算机。它包含了一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组件。
  • 功能:JVM的主要功能是读取Java字节码,并将其转换为机器码执行。这个过程可以通过解释执行(逐行转换并运行)或JIT(Just-In-Time)编译执行(将字节码编译成本地机器码以提高效率)来完成。
2、JVM的组成结构

JVM主要由以下几个部分组成:

  • 类加载器(Class Loader):负责加载类的二进制数据到JVM的方法区中,并在堆区创建对应的java.lang.Class对象,作为程序中对这类数据访问的入口。
  • 运行时数据区(Runtime Data Areas)
    • 方法区(Method Area):用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
    • 堆(Heap):被线程共享的一块内存区域,创建的对象和数组都保存在Java堆内存中,也是垃圾收集器进行垃圾收集的最重要的内存区域。
    • 栈(Stack):每个线程创建的同时都会创建虚拟机栈,其内部保存一个个栈帧(Stack Frame),对应着每一次方法调用。
    • 程序计数器(Program Counter Register):是一块较小的内存空间,是当前线程所执行的字节码行号指示器。
    • 本地方法栈(Native Method Stacks):与虚拟机栈所发挥的作用非常相似,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。
  • 执行引擎(Execution Engine):负责执行JVM的字节码。执行引擎在执行的过程中会进行字节码的解释执行,或者将字节码编译成本地代码进行执行。
  • 垃圾收集器(Garbage Collector, GC):负责回收JVM堆内存中不再被引用的对象所占用的内存,以避免内存泄露。
3、JVM的作用与特点
  • 作用
    • 提供跨平台能力:JVM作为中间层,屏蔽了与具体平台相关的信息,使得Java程序能够在不同的操作系统和硬件平台上运行而无需修改。
    • 内存管理:JVM负责动态分配内存给Java对象和数组,并通过垃圾回收机制回收不再被引用的对象所占用的内存。
    • 安全特性:JVM提供了多层安全特性,包括类加载机制中的字节码验证器,确保加载的代码在执行前不会对JVM造成伤害,防止恶意代码执行。
    • 多线程支持:JVM允许多线程的执行,对多线程环境中的线程调度和管理提供支持。
  • 特点
    • 移植性强:由于JVM的跨平台能力,Java程序可以轻松地在不同的操作系统和硬件平台上运行。
    • 安全性高:JVM通过多层安全机制保护程序的安全执行。
    • 面向对象:Java语言是一种面向对象的编程语言,JVM也支持面向对象的特性。
    • 自动垃圾回收:JVM通过垃圾回收机制自动回收不再被引用的对象所占用的内存,减轻了程序员的负担。

综上所述,JVM是Java技术的核心部分,它提供了跨平台能力、内存管理、安全特性和多线程支持等功能,使得Java程序能够高效、安全地在各种平台上运行。

三、JDK与JRE以及JVM之间的关系

1.JDK与JRE之间的关系
包含关系
  • JDK包含了JRE,即安装了JDK就意味着同时也安装了JRE。因此,安装了JDK的计算机上无需再单独安装JRE。
功能差异
  • JDK提供了开发Java程序所需的全套工具和资源,而JRE仅提供了运行Java程序所需的基础设施。
使用场景
  • JDK主要面向开发人员,用于开发、测试和部署Java应用程序;而JRE主要面向普通用户或程序使用者,用于运行Java程序。
2.JRE与JVM之间的关系
包含关系
  • JRE包含了JVM。JRE是Java程序的运行环境,而JVM是JRE中的核心组件,负责执行Java字节码。
功能差异
  • JRE:提供了运行Java程序所需的所有运行时库和虚拟机。除了JVM之外,JRE还包括了Java核心类库和其他支持文件,这些都是运行Java程序所必需的。
  • JVM:是Java程序的执行引擎,它能够将Java字节码转换成特定系统架构上的机器码并执行。JVM是跨平台的,因为它将字节码转换成机器码的工作是在运行时动态完成的,而不是在编译时。
组件关系
  • 在JRE中,JVM与Java核心类库和其他支持文件共同协作,为Java程序提供一个完整的运行环境。
示例:如下是Java8.0 platform

小结

JDK=JRE+开发工具集(例如Javac编译工具等)

JRE=JVM+Java SE 标准类库

简而言之,JDK是开发Java程序的全套工具包,包含了JRE和额外的开发工具;JRE是运行Java程序的必须环境,包含了JVM和Java核心类库;而JVM则是执行Java字节码的核心引擎。这三者共同构成了Java技术的核心部分,使得Java程序能够跨平台运行并享受丰富的开发资源和运行支持。

相关推荐
soragui6 分钟前
【Ubuntu】如何轻松在Apache服务器上部署Laravel博客系统
开发语言·个人开发
boy快快长大10 分钟前
【NebulaGraph】查询案例(六)
java·服务器·数据库
van叶~10 分钟前
仓颉语言实战——1. 类型
开发语言·windows·python·仓颉
重生之Java开发工程师14 分钟前
JVM 主要组成部分与内存区域
java·jvm·面试
万亿少女的梦16822 分钟前
高校网络安全存在的问题与对策研究
java·开发语言·前端·网络·数据库·python
罗政26 分钟前
PDF书籍《手写调用链监控APM系统-Java版》第2章 第一个Agent应用
java·python·pdf
java1565505797033 分钟前
Docker Compose一键部署Spring Boot + Vue项目
java
叫我阿呆就好了36 分钟前
C 进阶 — 文件操作
c语言·开发语言
吴冰_hogan37 分钟前
JVM运行时数据区的详细解析
jvm
玉红77737 分钟前
Erlang语言的数据结构
开发语言·后端·golang