傻傻分不清楚:JDK/JRE/JVM的区别和联系

在Java开发的世界里,JDK、JRE和JVM是三个经常听到的术语。

对于初学者来说,它们的概念和区别可能会让人感到困惑。

这篇文章详细解释下三个组件的含义、它们之间的区别和联系。

一,JDK:Java Development Kit

JDK是Java开发工具包,它是一个全面的软件开发工具集合,包含了Java开发所需的所有工具和库。JDK是为那些打算创建Java应用程序的开发人员准备的。它包括:

  • Java编译器:将Java源代码转换为字节码。
  • Java虚拟机:运行编译后的Java字节码。
  • Java库:提供了大量预先构建的代码,这些代码可以直用于开发人员创建的应用程序中。
  • 其他工具:如用于生成文档的javadoc,打包Java应用程序的jar等。

JDK是开发Java应用程序的核心,没有它,开发人员就无法编译和创建Java应用程序。

二,JRE:Java Runtime Environment

JRE是Java运行时环境,它包含运行Java应用程序所需的所有内容,但不包括开发工具。JRE包括:

  • Java虚拟机(JVM)。
  • Java核心类库:提供了Java程序运行时所需的类和接口。

如果你只需要运行Java应用程序,而不是开发它们,那么安装JRE就足够了。JRE确保了Java应用程序能够在不同的平台上以相同的方式运行,这是因为JRE为Java程序提供了一个独立于平台的运行环境。

三,JVM:Java Virtual Machine

JVM是Java虚拟机,它是JRE的核心组成部分,负责执行编译后的Java程序(即Java字节码)。JVM是一个虚拟的计算机,它提供了一个环境,Java字节码可以在其中运行。JVM负责:

  • 加载Java字节码
  • 验证字节码的有效性,确保它不会破坏运行主机。
  • 执行字节码,提供必要的运行时环境。

JVM是Java语言跨平台能力的关键,它使得Java应用程序可以在任何安装有兼容JVM的设备上运行。

四,区别和联系

1,从安装目录看JDK和JRE的区别

看看安装的JDK8的目录结构:
在这里插入图片描述
我们发现在JDK里是包含JRE的。

但是再看JDK17的安装目录时:
在这里插入图片描述
JDK17已经找不到JRE这个文件夹了,这是因为Oracle逐渐淡化JRE和JDK的区别,统一用JDK而不再提供JRE的下载,那么在以后的版本中就不存在JDK和JRE的区别了。

2,图示

在这里插入图片描述

从上图上图中可以看出:

  • JDK包含JRE,比JRE多了开发和调试的工具,比如把Java文件编译为class文件的javac,再比如一些诊断工具jmap、jconsole、jheap,还有反编译工具javap

  • JDK是最全面的,包含了JRE和JVM以及开发工具。如果你打算开发Java应用程序,你应该安装JDK。当然,你可以直接把JDK部署到服务器上去

  • JRE是运行Java应用程序的最小环境,它包含了JVM和Java核心类库,比方说ArrayList类、System类等等,是包含在JRE中的lib目录下的rt.jar包中的,但JRE不包括开发工具。如果你不需要开发Java应用程序,而只需要运行它们,JRE是一个更小、更快的安装选项
    在这里插入图片描述

  • JVM是JRE的一部分,也是JDK的一部分,它是执行Java字节码的虚拟机

3,Hello World是如何运行的

把HelloWorld这个应用从开发到运行进行拆解,看看JDK、JRE、JVM是如何配合工作的:

  • 编写HelloWorld.java文件,此时JDK/JRE/JVM都不参与
  • 将HelloWorld.java编译为HelloWorld.class文件,此时需要JDK的参与
  • 当我们执行java命令时,首先启动了JVM进程,此时就需要JRE了
  • JVM进程加载HelloWorld.class文件,解释字节码,加载字节码中使用的核心类库如System类,此时需要用到JRE的核心类库
结论

简而言之,如果是开发Java应用,则必须要JDK;如果你只是想运行Java应用程序,JRE就足够了;而JVM是这两者背后的引擎,它使得Java的跨平台能力成为可能。

同时需要注意的时,高版本比如JDK17已经没有JDK和JRE的区分了,只有JDK,而没有JRE的存在了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s个人认知理解

pod的定义 pod里面有容器,所以pod就是一个容器组,一个pod里面可以有多个容器也可以有一个容器,最低只能有一个容器,目前现在主流使用的都是一个pod里面一个容器,同一个pod里面的容器,需要紧耦合。配置文件…

重学java 35.API 6.包装类

心有所念,必有所灵 —— 24.5.10 一、基本数据类型对应的引用数据类型(包装类) 1概述 就是基本类型所对应的类(包装类),我们需要将基本类型转为包装类,从而让基本类型拥有类的特性(是基本类型可以使用包装类…

Excel操作之工具类

需求:根据指定的路径下模版进行解析 将模版上传到指定的文件服务器。 1:将路径下的excel文件进行解析 下载 A:创建excel表格对应的字段注解 ExcelColumn Retention(RetentionPolicy.RUNTIME) Target(ElementType.FIELD) public interface ExcelColumn …

milvus元数据在etcd的存储解析

milvus元数据在etcd的存储解析 数据以key-value形式存在。 大致包含如下一些种类: databasecollectionfieldpartitionindexsegment-indexresource_groupsession database 创建一个数据库会产生2个key,但value是相同的。 key规则: 前缀/root-coord/database/db…

【SRC实战】利用APP前端加密构造数据包

挖个洞先 https://mp.weixin.qq.com/s/ZnaRn222xJU0MQxWoRaiJg “ 以下漏洞均为实验靶场,如有雷同,纯属巧合” 01 — 漏洞证明 “ 参数加密的情况,不会逆向怎么办?” 1、新用户首次设置密码时抓包,此处设置为0000…

设计合理的IT运维服务目录:打造高效运维的蓝图

在数字化转型的浪潮中,一个设计合理、内容详尽的IT运维服务目录是连接服务提供者与消费者之间的桥梁,它不仅体现了服务设计的专业性,还直接影响着运维效率和服务质量。如何设计出既合理又高效的IT运维服务目录?让我们结合ITIL 4框…

Modown9.1主题无限制使用+Erphpdown17.1插件

Modown9.1主题无限制使用 1、Erphpdown17.1插件Modown9.1主题 2、送Modown主题详细教程。 1、Erphpdown插件和Modown主题无需激活 2、送的插件均无需激活 3、主题插件均不包更新 4、已亲测可以完美使用。 功能强大,适用于绝大多数虚拟资源站!物超所值&a…

分布式光伏管理平台功能介绍

一、项目管理系统 1、关键信息:板块化展现项目关键信息,包含所在区域、屋面类型、未来25年发电量、累计收益等信息。 (1) 可迅速获取项目核心要点 (2) 及时跟进修改,凸显项目信息 (3) 项目信息清晰展现,了解整体项目流程 2、项…

【已解决】QT C++中QLineEdit不可粘贴输入

本博文源于生产实际,主要解决LineEdit不可粘贴输入的情况。下面将进行具体分析 问题来源 输入框只能一个个输入,不可复制粘贴。 分析 给QLineEdit装一个监听事件,监听它的事件即可。 问题解决步骤 问题一共分为三步: 书写监…

Find My资讯|苹果设备在修复期间可以保持启用“Find My“功能

iOS 17.5 中有一项名为"维修状态"的新功能,可让送修的设备保持启用"查找我的"(Find My)功能。此前,用户在送修设备时必须禁用跟踪设备位置的"查找我的"功能,但iOS 17.5发布后&#xff0…

鸿蒙应用开发DevEco Studio工程目录模块介绍

面向开发者,HarmonyOS 推出了 DevEco Studio 和 Dev Device Tool 两款开发工具,前者目前迭代至 3.1 版本(对外开放版本),用于开发 HarmonyOS 应用;后者用于开发智能设备 应用的工程主体结构如上图 在这里我…

flutter开发实战-GetX响应式状态管理使用

flutter开发实战-GetX响应式状态管理使用 GetX是一个简单的响应式状态管理解决方案。GetX是Flutter的一款超轻、功能强大的解决方案。它将高性能状态管理、智能依赖注入和路由管理快速而实用地结合在一起。这里简单使用一下GetX 一、引入GetX 在工程的pubspec.yaml中引入插件…

Python中的分布式爬虫系统Scrapy与分布式任务队列的结合

随着互联网的不断发展,网络爬虫在数据采集和信息挖掘中发挥着重要作用。然而,单机爬虫往往难以应对大规模数据抓取的需求,因此,构建分布式爬虫系统成为了一种必然选择。本文将介绍如何利用 Python 中的 Scrapy 框架和分布式任务队…

TikTok自动评论、回复的脚本怎么制作?

在当今数字化的时代,社交媒体平台如TikTok已经成为人们日常生活的一部分,为了更有效地在TikTok上进行营销或互动,许多用户和企业开始寻找自动化工具,如自动评论和回复的脚本,以节省时间并提高效率。 本文将科普如何制…

H5 处理点击元素高亮、自定义按钮、去除焦点边框

1、设置移动设备上点击元素时出现的高亮颜色 *{-webkit-tap-highlight-color: transparent; }2、如果你想要自定义按钮的样式,你可以使用 -webkit-appearance: none; 来移除按钮的默认样式 .button {-webkit-appearance: none;appearance: none; /* 兼容性更好的通…

C语言 | Leetcode C语言题解之第72题编辑距离

题目&#xff1a; 题解&#xff1a; static inline int Min(const int a, const int b, const int c) {int min (a < b) ? a : b;return (min < c) ? min : c; }int minDistance(char * word1, char * word2){int m strlen(word1), n strlen(word2);int dp[m 1][n…

知识蒸馏,需要合适的教师模型,学生模型,蒸馏数据,损失函数,训练策略,让小模型有大模型的知识

知识蒸馏使用的是Teacher—Student模型&#xff0c;其中teacher是“知识”的输出者&#xff0c;student是“知识”的接受者。知识蒸馏的过程分为2个阶段: 原始模型训练: 训练"Teacher模型", 它的特点是模型相对复杂&#xff0c;也可以由多个分别训练的模型集成而成。…

C++_红黑树的学习

1. 红黑树的概念 红黑树 &#xff0c;是一种 二叉搜索树 &#xff0c;但 在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是 Red 或 Black 。 通过对 任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍 &…

【活动】如何通过AI技术提升内容生产的效率与质量

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 如何通过AI技术提升内容生产的效率与质量引言一、自然语言处理&#xff08;NLP&…

JAVA排序相关习题7

1.插入排序 1.1 基本思想 直接插入排序是一种简单的插入排序法&#xff0c;其基本思想是&#xff1a; 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列 。 /*** 时间复杂度&…
最新文章