文章目录

  • 前言
  • 一、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执行程序的过程

  1. 加载.class 文件
    所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。只有JVM还不能成功执行.class的类文件,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。
    运行class文件
    可以在命令行中输入 java 字节码文件名 ,此时启动了一个jvm,加载字节码文件名.class字节码文件到内存,然后jvm运行内存中的字节码指令
    在IDE上就类似于点击运行按钮。
  2. 管理并分配内存
  3. 执行垃圾收集
    调用垃圾收集器进行垃圾回收

六、三者的区别与联系

  • JDK用于开发,是给开发人员用的,JRE 用于运行java程序,和JVM是给普通用户使用的。如果只是运行Java程序,可以只安装JRE,无序安装JDK。也就是说:使用JDK开发完成的java程序,交给JRE去运行。
  • JDK包含了JRE,JDK 和 JRE 中都包含 JVM。也可以说JDK是JRE+Java的开发工具。JRE包含了JVM+Java语言的核心类库。

转载:程序猿的内心独白

JDK 和 JRE 有什么区别?相关推荐

  1. jdk和jre和jvm区别_JDK,JRE和JVM之间的区别

    jdk和jre和jvm区别 The difference between JDK and JRE and JVM is one of the popular interview questions. ...

  2. Java 基础.JDK 和 JRE 有什么区别

    一.Java 基础 1.JDK 和 JRE 有什么区别? 答:JDK是JAVA程序运行时需要用的开发工具包,其内部也有JRE运行环境JRE JRE是JAVA程序运行时需要的运行环境,就是说如果你光是运 ...

  3. JVM、JDK、JRE三者的区别与联系

    JVM.JDK.JRE三者的区别与联系 JVM 什么是JVM? JVM即java虚拟机,可以运行字节码文件,针对不同的操作系统JVM有不同的实现,以实现相同的字节码文件在不同的平台可以得到同一个结果. ...

  4. 什么是环境变量、JDK和JRE;以及JDK与JRE有什么区别

    文章目录 一.什么是环境变量(environment variables) 二.系统变量和用户变量的区别 三.什么是JDK.JRE? 四.JDK和JRE的区别有什么区别 五.结束 一.什么是环境变量( ...

  5. JDK和JRE有什么区别

    JDK(Java Development Kit):是Java的开发运行环境,在程序员的电脑上当然要安装JDK JRE(Java Runtime Environment):是Java运行环境,如果你不 ...

  6. JDK,JRE不同版本区别汇总

    ##今天准备在华为云ARM鲲鹏服务器投建微服务,下载 jre jdk时这些版本 bullseye buster stretch -版本傻傻分不清- Debian 发行版本 Debian 一直维护着至少 ...

  7. JVM,JDK,JRE和OpenJDK有什么区别?

    本文翻译自:What is the difference between JVM, JDK, JRE & OpenJDK? What is the difference between JVM ...

  8. java jdk的作用_jdk的作用是什么?jdk和jre区别介绍

    之前给大家介绍了jdk是什么意思,那么接下来要给大家讲到的就是jdk的作用以及jdk和jre之间的区别,一起来了解一下吧! 一.jdk的作用是什么? jdk是java的开发编译环bai境. 它里面包含 ...

  9. J2EE,J2SE,J2ME,JDK,SDK,JRE,JVM区别

    转自:http://www.metsky.com/archives/547.html 一.J2EE.J2SE.J2ME区别 J2EE--全称Java 2 Enterprise Edition,是Jav ...

  10. 888道Java高级面试题,JDK、JRE与JVM的区别与联系

    前言 我在知乎上看到这样一个话题,关于程序员的: 听同学说干码农这行每天都要加班,这样的话,不就没精力做别的事情了.有个师兄做 IT 销售,不太辛苦,生活还算是美滋滋,是真的吗?我也知道社会上干哪一行 ...

最新文章

  1. 径向基函数(RBF)神经网络
  2. 【hihoCoder】1288 : Font Size
  3. hdu 1080(LCS变形)
  4. MS BizSpark计划-免费提供软件和服务
  5. 《剑指offer》-- 树的子结构、二叉树的镜像、二叉树的深度、平衡二叉树
  6. Nodejs学习笔记(二)——模块
  7. 重新认识:指向函数的指针
  8. OPPO 实时数仓揭秘:从顶层设计实现离线与实时的平滑迁移
  9. Android逆向分析之dex2jar异常处理的几种情况
  10. 2020程序设计竞赛-现场赛题解
  11. 经典小游戏开发思路和算法之拼图(1)
  12. ipscan(ip端口扫描工具) 2.21 中文绿色版 局域网ip端口扫描神器
  13. 奇葩算法系列——猴子排序
  14. 微信小程序实现点击分享按钮时动态改变分享图片和标题
  15. 论文研究12:DUAL-PATH RNN for audio separation
  16. python quit函数作用_初识Python之基础知识
  17. 【Unity3D】 Unity Chan项目分享
  18. 盛大九年征程 盛大的娱乐帝国 盛大维稳
  19. 如何将EasyCVR平台RTSP接入的设备数据迁移到EasyNVR中?
  20. 布朗大学计算机研究生申请,跨专业获美国常青藤布朗大学数据科学DS硕士录取...

热门文章

  1. 网吧用电影服务器系统,网吧流媒体电影服务器搭建的解决方案
  2. 如何做职业规划并进行求职准备(持续更新)
  3. Creative Cloud Cleaner Tool mac卸载adobe系列软件详细教程
  4. 卸载 Creative Cloud 桌面应用程序(macOS、Windows)
  5. 海康威视设计:标准的数据中心机房设计图集DWG,70张图纸
  6. 电路布线问题的动态规划实现(java)
  7. html+css 登录界面
  8. 科蒂斯控制器故障代码_科蒂斯控制器故障代码大全-CURTIS
  9. php vld 安装,PHP性能之语言性能优化:vld
  10. Java HotSpot(TM)64位服务器虚拟机警告