JDK 和 JRE 有什么区别?
文章目录
- 前言
- 一、JDK简单介绍
- 二、JRE
- 三、JVM
- 四、Java跨平台的原因
- 五、jvm执行程序的过程
- 六、三者的区别与联系
前言
大多数人刚接触Java的时候都会经常看到JDK、JRE、JVM,但可能一直迷迷糊糊,不知道它们之间真正的作用和含义,而了解JDK、JRE、JVM分别是什么及它们之间的关系有助于我们更加深刻的理解java语言的特性。
Java程序是运行在JVM(Java虚拟机)上的,在开发程序之前要配置Java开发环境,而配置环境要做的就是JDK的安装和配置。
三者的大致结构是这样的,简单来说就是JDK包含JRE,JRE又包含JVM的关系。如下图所示:
一、JDK简单介绍
JDK:Java Development Kit 是Java的标准开发工具包(普通用户只需要安装 JRE来运行 Java 程序。而程序开发者必须安装JDK来编译、调试程序)。它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行环境JRE,以及常用的Java基础类库等,是整个JAVA的核心。
JDK一般有三种版本:
SE(J2SE),standard edition,标准版,是我们通常用的一个版本 EE(J2EE),enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序, ME(J2ME),micro edtion,主要用于移动设备、嵌入式设备上的java应用程序 (相对来说现在使用的很少了)
JDK安装目录下各个子文件目录和文档作用的详细介绍
下图是Java8中JDK的安装目录
bin文件里面存放了JDK的各种开发工具的可执行文件,主要的是编译器(javac.exe)
db文件是一个先进的全事务处理的基于Java技术的数据库(jdk自带数据库db的使用)
include文件里面是Java和jvm交互用的头文件
jre为java运行环境
lib文件存放的是JDK工具命令的实际执行程序
二、JRE
JRE:Java runtime environment 是运行基于Java语言编写的程序所不可缺少的运行环境,用于解释执行Java的字节码文件。
也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。JRE中包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运行Java程序的必要组件。与大家熟知的JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。
下图是Java8中JRE的安装目录,里面有两个文件夹bin和lib。你可以认为bin里的就是JVM,lib中则是JVM工作所需要的类库,而JVM和 lib和起来就称为JRE
从JDK11开始,JDK和JRE都是在一起的,安装后默认是没有JRE的。如果需要JRE这个单独目录,可以在JDK目录下面去打开命令窗口,然后执行如下命令(win10执行这个生成JRE需要目录权限):
bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre
执行完之后就会生成JRE,但无论使用tomcat 还是eclipse,没有JRE文件夹实际上并不影响你的使用。
三、JVM
JVM:Java Virtual Machine 是Java的虚拟机,是JRE的一部分。它是整个java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机。
所有平台的上的JVM向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。
四、Java跨平台的原因
使用Java编译器编译Java程序时,生成的是与平台无关的字节码,这些字节码只面向JVM。不同平台的JVM都是不同的,但它们都提供了相同的接口。
JVM是Java程序跨平台的最核心的部分,只要为不同平台实现了相应的虚拟机,编译后的Java字节码就可以在该平台上运行。其屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
正是因为有了JVM的存在,Java才实现了强大的跨平台特性。
五、jvm执行程序的过程
- 加载.class 文件
所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。只有JVM还不能成功执行.class的类文件,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。
运行class文件
可以在命令行中输入 java 字节码文件名 ,此时启动了一个jvm,加载字节码文件名.class字节码文件到内存,然后jvm运行内存中的字节码指令
在IDE上就类似于点击运行按钮。 - 管理并分配内存
- 执行垃圾收集
调用垃圾收集器进行垃圾回收
六、三者的区别与联系
- JDK用于开发,是给开发人员用的,JRE 用于运行java程序,和JVM是给普通用户使用的。如果只是运行Java程序,可以只安装JRE,无序安装JDK。也就是说:使用JDK开发完成的java程序,交给JRE去运行。
- JDK包含了JRE,JDK 和 JRE 中都包含 JVM。也可以说JDK是JRE+Java的开发工具。JRE包含了JVM+Java语言的核心类库。
转载:程序猿的内心独白
JDK 和 JRE 有什么区别?相关推荐
- jdk和jre和jvm区别_JDK,JRE和JVM之间的区别
jdk和jre和jvm区别 The difference between JDK and JRE and JVM is one of the popular interview questions. ...
- Java 基础.JDK 和 JRE 有什么区别
一.Java 基础 1.JDK 和 JRE 有什么区别? 答:JDK是JAVA程序运行时需要用的开发工具包,其内部也有JRE运行环境JRE JRE是JAVA程序运行时需要的运行环境,就是说如果你光是运 ...
- JVM、JDK、JRE三者的区别与联系
JVM.JDK.JRE三者的区别与联系 JVM 什么是JVM? JVM即java虚拟机,可以运行字节码文件,针对不同的操作系统JVM有不同的实现,以实现相同的字节码文件在不同的平台可以得到同一个结果. ...
- 什么是环境变量、JDK和JRE;以及JDK与JRE有什么区别
文章目录 一.什么是环境变量(environment variables) 二.系统变量和用户变量的区别 三.什么是JDK.JRE? 四.JDK和JRE的区别有什么区别 五.结束 一.什么是环境变量( ...
- JDK和JRE有什么区别
JDK(Java Development Kit):是Java的开发运行环境,在程序员的电脑上当然要安装JDK JRE(Java Runtime Environment):是Java运行环境,如果你不 ...
- JDK,JRE不同版本区别汇总
##今天准备在华为云ARM鲲鹏服务器投建微服务,下载 jre jdk时这些版本 bullseye buster stretch -版本傻傻分不清- Debian 发行版本 Debian 一直维护着至少 ...
- JVM,JDK,JRE和OpenJDK有什么区别?
本文翻译自:What is the difference between JVM, JDK, JRE & OpenJDK? What is the difference between JVM ...
- java jdk的作用_jdk的作用是什么?jdk和jre区别介绍
之前给大家介绍了jdk是什么意思,那么接下来要给大家讲到的就是jdk的作用以及jdk和jre之间的区别,一起来了解一下吧! 一.jdk的作用是什么? jdk是java的开发编译环bai境. 它里面包含 ...
- J2EE,J2SE,J2ME,JDK,SDK,JRE,JVM区别
转自:http://www.metsky.com/archives/547.html 一.J2EE.J2SE.J2ME区别 J2EE--全称Java 2 Enterprise Edition,是Jav ...
- 888道Java高级面试题,JDK、JRE与JVM的区别与联系
前言 我在知乎上看到这样一个话题,关于程序员的: 听同学说干码农这行每天都要加班,这样的话,不就没精力做别的事情了.有个师兄做 IT 销售,不太辛苦,生活还算是美滋滋,是真的吗?我也知道社会上干哪一行 ...
最新文章
- C2:抽象工厂 Abstract Factory
- Linux下DNS简单部署(主从域名服务器)
- flask uwsgi nginx *504* Gateway Time ou解决办法
- [Android] DiffUtil在RecyclerView中的使用详解
- mysql服务器消失_MySQL服务器已经消失了
- online_judge_1046
- 函数中返回char *类型
- 2018及以后的热门网络技巧
- Leet Code OJ 15. 3Sum[Difficulty: Medium]
- Hadoop实战项目之网站数据点击流分析(转载分析)
- 343. 整数拆分 golang 动态规划
- Java 日期与时间
- java 过滤器 弹出提示_JavaWeb 过滤器——验证登录 防止未登录进入界面
- “焖鸡”游戏中的排序问题
- screen乱码问题
- linux卸载rpm安装的golang,linux下go安装/卸载重装-Go语言中文社区
- Readyboost功能
- 2022年全国职业院校技能大赛网络安全竞赛试题 A-1样题
- IIS本地FTP服务器搭建
- 深度学习:欠拟合问题的几种解决方案
热门文章
- 计算机发展趋势 五笔型码,计算机五笔识别码字有哪些
- 按键精灵手机助手计算时间差
- 计算机毕业设计Python+django 网上外卖订餐系统(源码+系统+mysql数据库+Lw文档)
- mysql网吧管理系统_网吧收银系统 网吧的收费管理系统 - 下载 - 搜珍网
- ectouch——wap端商城の数据表字典
- 快来,女神节已过,这边的大奖还没人领~【每一个女性都值得被赞美】 ——用ADC制奖状,赢大奖
- 软件测试 | 状态迁移法
- JavaScript系列之注释
- MT7628学习笔记(4)——固件烧录(TFTP方式)
- Python 爬虫 ~ Prison Oriented Programming。