你已经分清JAVA中JVM、JDK与JRE的作用和关系了吗?

你已经分清JAVA中JVM、JDK与JRE的作用和关系了吗?

    • [一. JVM、JDK与JRE的关系](#一. JVM、JDK与JRE的关系)
    • [二. JVM、JDK与JRE的作用](#二. JVM、JDK与JRE的作用)
      • [2.1 什么是JVM?](#2.1 什么是JVM?)
      • [2.2 什么是JDK?](#2.2 什么是JDK?)
      • [2.3 什么是JRE?](#2.3 什么是JRE?)

前言

点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。

作者:神的孩子都在歌唱

在Java的世界里,JVM、JDK和JRE这三个术语常常让人感到混淆。它们究竟是什么?有什么区别?如何协同工作,共同支持Java程序的运行?接下来 神唱 会带你一探究竟

一. JVM、JDK与JRE的关系

  • JVM 是Java程序执行的核心,它负责执行字节码。
  • JRE 包含JVM和Java类库,用于支持Java程序的运行。JRE没有开发工具,它是用户运行Java程序时所需要的环境。
  • JDK 包含了JRE以及开发Java程序所需的其他工具(如编译器和调试器)。开发者需要安装JDK来编写和调试Java程序。

简单来说,JDK包括了JRE,而JRE又包括了JVM 。如下图

二. JVM、JDK与JRE的作用

2.1 什么是JVM?

JVM(Java Virtual Machine)即Java虚拟机,是Java程序运行的核心组件之一。它的作用就像一个 "翻译官" ,将Java字节码(.class文件)转换为 机器码 ,让程序能够在不同的操作系统和硬件平台上运行。这也是Java语言实现 "一次编写,到处运行" 理念的关键。

JVM的核心职责包括:

  • 加载字节码:JVM加载.class文件并进行验证。
  • 解释执行或编译执行:JVM通过解释器或即时编译(JIT)技术执行字节码。
  • 内存管理:JVM负责垃圾回收和内存的分配与释放。

值得一提的是,JVM与具体的操作系统和硬件平台紧密相关,因此每种平台 (Windows,Linux,macOS) 都有相应的JVM实现。所以JVM 并不是只有一种!只要满足 JVM 规范,每个公司、组织或者个人都可以开发自己的专属 JVM ,我们平时接触的一般都是 HotSpot VM 。维基百科上有常见 JVM 的对比:Comparison of Java virtual machines

2.2 什么是JDK?

JDK(Java Development Kit)是Java开发工具包,它是开发Java应用程序的完整工具集。JDK包含了JVM以及用于开发Java程序所需要的各种工具和API。换句话说,JDK是开发者用来编写、调试、和运行Java程序的"武器库"。

JDK的主要组成部分包括:

  • JVM:我们刚刚讲过的Java虚拟机,用于执行Java程序。
  • Java编译器(javac):将Java源代码(.java文件)编译成字节码(.class文件)。
  • 调试工具:用于在开发过程中调试Java程序。
  • 标准库(Java API):JDK中包含了大量的标准类库,比如文件操作、网络编程、集合框架等。
  • 其他工具 :例如jar命令,用于创建和管理Java归档文件。

如果你是一个Java开发者,安装JDK是必不可少的一步。

2.3 什么是JRE?

JRE(Java Runtime Environment)是Java运行时环境,它是运行Java应用程序所需的最小环境。与JDK相比,JRE更为轻量,它不包含开发工具(比如编译器),只有JVM和一些支持运行Java程序的类库。

JRE的主要组成部分包括:

  • JVM:用于执行Java程序。
  • 类库(Java class Libaray):JRE包含了Java应用运行所需的标准类库,例如IO库、网络库等。

对于普通用户而言,安装JRE即可运行大部分的Java程序。

作者:神的孩子都在歌唱

本人博客:https://blog.csdn.net/weixin_46654114

转载说明:务必注明来源,附带本人博客连接

相关推荐
程序员清风5 小时前
算法题中的边界条件、测试与调试
开发语言·算法·kotlin
砚底藏山河5 小时前
python量化实操:冷热分层存储
java·开发语言·python·金融
十五年专注C++开发5 小时前
pybind11:一个跨C++和Python平台的编程库
开发语言·c++·python·pybind11
yuniko-n6 小时前
【JUC】原子类
java
CodeYp20196 小时前
第11讲:stack 和 queue
开发语言·c++·queue·stack
惊讶的猫6 小时前
Query 改写
java·rag
信誓旦旦的程序猿6 小时前
【Python量化实战宝典 #18】MACD 金叉死叉手册:DIF、DEA、柱体全拆解(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
咩咩啃树皮6 小时前
JavaScript 异步流程为什么容易失控?从回调到可维护设计
开发语言·javascript·ecmascript
沫璃染墨6 小时前
《Qt从零入门系列(十五):Qt线程安全与锁机制详解——从QMutex到RAII与读写锁实战》
开发语言·c++·qt·安全·交互·线程·qt6.3
Misnearch6 小时前
第7章 面向对象技术
java·开发语言·软考