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

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

    • 一. JVM、JDK与JRE的关系
    • 二. JVM、JDK与JRE的作用
      • 2.1 什么是JVM?
      • 2.2 什么是JDK?
      • 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。如下图
image-20250105215843675

二. 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
转载说明:务必注明来源,附带本人博客连接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/502398.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在不到 5 分钟的时间内将威胁情报 PDF 添加为 AI 助手的自定义知识

作者:来自 Elastic jamesspi 安全运营团队通常会维护威胁情报报告的存储库,这些报告包含由报告提供商生成的大量知识。然而,挑战在于,这些报告的内容通常以 PDF 格式存在,使得在处理安全事件或调查时难以检索和引用相关…

数据挖掘——朴素贝叶斯分类

数据挖掘——朴素贝叶斯分类 朴素贝叶斯分类极大后验假设独立性假设贝叶斯分类器总结 朴素贝叶斯分类 什么是分类? 找出描述和区分数据类或概念的模型,以便能够使用模型预测未知的对象的类标号 概念区分 分类与回归 分类是预测分类(离散、…

LabVIEW在反馈控制时如何解决带约束的控制问题

在LabVIEW中,解决带约束的反馈控制问题通常需要使用先进的控制算法或特定的方法来满足约束条件,同时保证控制系统的性能和稳定性。以下是解决这类问题的一些常用方法和步骤: ​ 1. 定义控制问题及约束条件 确定被控对象的动态特性&#xff08…

机器人对物体重定向操作的发展简述

物体重定向操作的发展简述 前言1、手内重定向和外部重定向2、重定向原语3、重定向状态转换网络4、连续任意姿态的重定向5、利用其他环境约束重定向总结Reference 前言 对于一些特殊的任务(如装配和打包),对物体放置的位姿由明确的要求&#…

Mysql数据实时同步到Es上

同步方案 ① 同步双写 同步双写实一种数据同步策略,它指的是在主数据库(如mysql) 上进行数据修改操作,同时将这些修改同步写入到ES 中,这种策略旨在确保两个数据库之间的数据一致性,并且优化系统的读写性能。 目标 同步双写是…

力扣66 加一

class Solution:def plusOne(self, digits: List[int]) -> List[int]:# 从最低位开始加一for i in range(len(digits) - 1, -1, -1):if digits[i] < 9:digits[i] 1return digitsdigits[i] 0# 如果所有位都是9&#xff0c;需要增加一位&#xff0c;例如 999 -> 1000r…

代码段中使用数据、栈

代码段中使用数据 改进之后 代码段中使用栈 在数据段中专门空出一段&#xff0c;作为栈 将数据、代码、栈放入不同段中

OpenCV的TickMeter计时类

OpenCV的TickMeter计时类 1. TickMeter是一个计时的类1.1 计算耗时1.2 计算循环的平均耗时和FPS1.3 function 2. 案例 1. TickMeter是一个计时的类 https://docs.opencv.org/4.x/d9/d6f/classcv_1_1TickMeter.html#details 1.1 计算耗时 TickMeter tm;tm.start();// do some…

Fabric部署-docker安装

一&#xff1a;安装docker 1.先卸载旧docker apt-get remove docker docker-engine docker.io containerd runc PS&#xff1a;新开的虚拟机输入命令后是这样的。 2.更新软件包 在终端中执行以下命令来更新Ubuntu软件包列表和已安装软件的版本: sudo apt update sudo apt …

【CSS】 ---- CSS 实现图片背景清除的滑动效果三种方法

1. 实现效果 1.1 removebg 实现图片背景的去除 1.2 gitee 登录界面的项目协同效果 2. 实现分析 最常见的方法就是通过 JS 定位获取设置对应盒子的宽度&#xff1b;removebg 使用的方法是 clip-path: polygon 来设置图片的显示区域&#xff1b;gitee 使用的方法是 clip: rect …

开源模型迎来颠覆性突破:DeepSeek-V3与Qwen2.5如何重塑AI格局?

不用再纠结选择哪个AI模型了&#xff01;chatTools 一站式提供o1推理模型、GPT4o、Claude和Gemini等多种选择&#xff0c;快来体验吧&#xff01; 在全球人工智能模型快速发展的浪潮中&#xff0c;开源模型正逐渐成为一股不可忽视的力量。近日&#xff0c;DeepSeek-V3和Qwen 2.…

微信开发工具git提交到码云

超简单&#xff0c;适用新手快速实现新项目备份到码云。步骤如下&#xff1a; 1、先在码云创建一个仓库&#xff0c;不要初始化readme文件 2、点击微信开发工具版本管理&#xff0c;如果第一次&#xff0c;会提示初始化仓库&#xff0c;照做就行 3、配置一些git信息 输入你的码…

PHP7和PHP8的最佳实践

php 7 和 php 8 的最佳实践包括&#xff1a;使用类型提示以避免运行时错误&#xff1b;利用命名空间组织代码并避免命名冲突&#xff1b;采用命名参数、联合类型等新特性增强可读性&#xff1b;用错误处理优雅地处理异常&#xff1b;关注性能优化&#xff0c;如避免全局变量和选…

数据分享:空气质量数据--哈尔滨

说明&#xff1a;如需数据可以直接到文章最后关注获取。 1.数据背景 地理位置与气候条件&#xff1a;哈尔滨位于中国东北部&#xff0c;黑龙江省南部&#xff0c;松花江中游。由于其地理位置&#xff0c;冬季寒冷且漫长&#xff0c;夏季短促而温热。这种气候特点对空气质量…

端口镜像SPAN与RSPAN

端口镜像概述 端口镜像的作用主要在于一些难度较大的网络技术的学习中&#xff0c;我们通过抓包对报文的分析&#xff0c;可以更好地理解 还有的就是在网络排障的过程中&#xff0c;我们可以通过抓包分析数据报文的收发等状态&#xff0c;来判断在哪个设备节点上出现了问题 …

基于Web的足球青训俱乐部管理后台系统的设计与开发源码(springboot+mysql+vue)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的基于Web的足球青训俱乐部管理后台系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基…

IDEA 撤销 merge 操作(详解)

作为一个开发者&#xff0c;我们都知道Git是一个非常重要的版本控制工具&#xff0c;尤其是在协作开发的过程中。然而&#xff0c;在使用Git的过程中难免会踩一些坑&#xff0c;今天我来给大家分享一个我曾经遇到的问题&#xff1a;在使用IDEA中进行merge操作后如何撤销错误的合…

用matlab调用realterm一次性发送16进制数

realterm采用PutString接口进行发送&#xff0c;需要注意的是发送的16进制数前面要加入0x标志。只有这样&#xff0c;realterm才能将输入的字符串识别为16进制数的形式。 另外,PutString函数支持两个参数输入&#xff0c;第一个参数为字符串&#xff0c;第二个参数为发送形式&…

C++基础概念复习

前言 本篇文章作基础复习用&#xff0c;主要是在C学习中遇到的概念总结&#xff0c;后续会继续补充。如有不足&#xff0c;请前辈指出&#xff0c;万分感谢。 1、什么是封装&#xff0c;有何优点&#xff0c;在C中如何体现封装这一特性&#xff1f; 封装是面向对象编程&…

【C++】矩阵转置问题详解与优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目解析&#x1f4af;第一种实现方式&#xff1a;我的初始做法实现思路优缺点分析 &#x1f4af;第二种实现方式&#xff1a;我的优化做法实现思路优缺点分析 &#x1f4a…