您现在的位置是:首页 > 正文

JDK和JRE的区别和联系

2024-01-30 20:07:03阅读 1

大家应该都知道JDK和JRE是什么的缩写,但是当面试官问道 “请用你所学的java知识,告诉我JDK是干什么的?” , “JRE有什么作用?” , “这两者有什么区别和联系?” 等问题时,可能就说的不是很明白了。下面我就详细讲述一下JDK和JRE之间的区别和联系,为大家彻底理清JDK和JRE相关的知识。

话不多说,先上图:

在这里插入图片描述

从图中可以看出JDK是整个JAVA的核心,包括了Java运行环境JRE(Java Runtime Envirnment)、一堆Java开发工具(javac/java/jdb等)和Java基础的类库(即Java API 包),下面开始揭开JDK和JRE的神秘面纱。


一、概念

JDK全称为Java Development Kit,顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包。

JRE全称为Java Runtime Environment,顾名思义是java运行时的环境,包含了java虚拟机,java基础类库,是使用java语言编写的程序运行所需要的软件环境。

二、区别

1、面向人群不同

JDK是提供给程序员使用的。JRE是提供给想运行java程序的用户使用的。

2、重要程度不同

如果你需要编写java程序,需要安装JDK。如果你需要运行java程序,只需要安装JRE就可以了。

3、安装目录不同

  1. 如果安装JDK,电脑会有两套JRE,一套是JDK中的JRE,位于 \jre 目录下。另外一套是JRE自己的,在下载安装时默认位于 C:\Program Files\Java\jre目录下。在这里博主当时安装JRE时是放到了D盘,如图:
  • E:\Java\jre
    在这里插入图片描述
  • D:\Java\jre
    在这里插入图片描述
  1. 如果只安装JRE,会默认在 C:\Program Files\Java 目录下安装唯一的一套JRE,位置可以选择,这里博主放到了D盘:
    在这里插入图片描述

三、联系

1、包含关系

JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具(JConsole,Web Services等工具软件),还包含了Java基础的类库(即Java API 包括rt.jar)。

2、执行关系

在这里首先就要提到JVM,JVM(Java Virtual Machine)就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。

只有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。

得到公式:jvm+lib=jre

bin目录中的jvm
lib中的jvm类

JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

总而言之,我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。

Perfection is achieved not when you have nothing more to add, but when you have nothing left to take away.—— Antoine de Saint-Exupery

网站文章

  • JS中String()与new String()的区别

    JS中String()与new String()的区别

    今天看到这样的面试题,如下: var yiifaa = 'yiifaa', str1 = new String(yiifaa), str2 = String(yiifaa) 1 2 3 声明与赋值了3个变量,然后考题如下: // 请确认以下的判断是否准确 str1 === yiifaa // str2 === yiifaa // typeof s...

    2024-01-30 20:06:36
  • react中本地开发跨域如何处理

    【代码】react中本地开发跨域如何处理。

    2024-01-30 20:06:22
  • 李超线段树

    李超线段树

    什么是李超线段树 先以一个问题引入: 在平面上有两种操作(强制在线): 插入一条表达式为 L : y = k*x+b 的直线,给出 k ,b 。 给出 t,求当前所有直线中与直线 x = t 交点的纵...

    2024-01-30 20:05:53
  • 数论题 (牛客网)

    [编程|1000分] 数码 时间限制:1秒 空间限制:32768K 题目描述 给定两个整数 l 和 r ,对于所有满足1 ≤ l ≤ x ≤ r ≤ 10^9 的 x ,把 x 的所有约数全部写下来。对于每个写下来的数,只保留最高位的那个数码。求1~9每个数码出现的次数。 输入描述: 一行,两个整数 l 和 r (1 ≤ l ≤ r ≤ 10^9)。 输出描述: 输出9行。

    2024-01-30 20:05:46
  • 正则表达式的与或非

    正则表达式的与或非

    转自: http://www.cnblogs.com/bvbook/archive/2010/11/03/1867775.html正则表达式的与或非我们都知道,写正则表达式有点像搭积木,复杂的功能总可以拆分开来,由不同的元素(也就是子表达式)对应,再用合适的关系将它们组合起来,就可以完成。在这一节,我们讲解常见的与或非关系的表达。与“与”是最简单的关

    2024-01-30 20:05:38
  • 网络安全——缓冲区溢出攻击

    网络安全——缓冲区溢出攻击

    什么是缓冲区?它是指程序运行期间,在内存中分配的一个连续的区域,用于保存包括字符数组在内的各种数据类型。所谓溢出,其实就是所填充的数据超出了原有的缓冲区边界,并非法占据了另一段内存区域。两者结合进来,所谓缓冲区溢出,就是由于填充数据越界而导致原有流程的改变,黑客借此精心构造填充数据,让程序转而执行特殊的代码,最终获取控制权。

    2024-01-30 20:05:33
  • 2022年腾讯首发Java岗分布式面试真题,助力金三银四我是认真的!

    2022年腾讯首发Java岗分布式面试真题,助力金三银四我是认真的!

    分布式分为分布式缓存(Redis)、分布式锁(Redis 或 Zookeeper)、分布式服务(Dubbo 或 SpringCloud)、分布式服务协调(Zookeeper)、分布式消息队列(Kafk...

    2024-01-30 20:05:04
  • 山西大学计算机专业国内排名,山西这所大学曾是国内排名前五,如今排名下滑,有点走下坡路了...

    山西大学计算机专业国内排名,山西这所大学曾是国内排名前五,如今排名下滑,有点走下坡路了...

    文/山西有不少大家熟知的大学,一共85所院校,其中34所本科院校,51所专科院校。我国的高校数量众多,达到了2900多所,快突破了3000所,不仅数量多,各大高校也都经过的多年的办学历程,才达到现在办...

    2024-01-30 20:04:57
  • html必要的结构标准,HTML_关于现代前端必要知识

    html必要的结构标准,HTML_关于现代前端必要知识

    由VS Code空.html文件打出html:5或!按下tab建后默认生成的.html基本框架代码说起我是title第一行: 很庆幸,如今我们只需要这么一个自闭合标签即可告诉浏览器,请使用html5的...

    2024-01-30 20:04:51
  • centos7 安装git_centos7搭建H1ve环境

    centos7 安装git_centos7搭建H1ve环境

    H1ve是一款开源的ctf平台,具备解题和攻防对抗模式,并且还有可视化战况界面.是个很不错的平台,我们今天来搭建一下,顺便解决一下搭建的各种问题.系统版本:centos7需要环境:dockerpython2 pipdocker-composemariadb开始搭建,先重新安装一个centos7的虚拟机.(mini最小化安装,安装过程不表).1.先安装docker依赖环境yum insta...

    2024-01-30 20:04:23