文章目录

  • 前言
  • 一、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. C2:抽象工厂 Abstract Factory
  2. Linux下DNS简单部署(主从域名服务器)
  3. flask uwsgi nginx *504* Gateway Time ou解决办法
  4. [Android] DiffUtil在RecyclerView中的使用详解
  5. mysql服务器消失_MySQL服务器已经消失了
  6. online_judge_1046
  7. 函数中返回char *类型
  8. 2018及以后的热门网络技巧
  9. Leet Code OJ 15. 3Sum[Difficulty: Medium]
  10. Hadoop实战项目之网站数据点击流分析(转载分析)
  11. 343. 整数拆分 golang 动态规划
  12. Java 日期与时间
  13. java 过滤器 弹出提示_JavaWeb 过滤器——验证登录 防止未登录进入界面
  14. “焖鸡”游戏中的排序问题
  15. screen乱码问题
  16. linux卸载rpm安装的golang,linux下go安装/卸载重装-Go语言中文社区
  17. Readyboost功能
  18. 2022年全国职业院校技能大赛网络安全竞赛试题 A-1样题
  19. IIS本地FTP服务器搭建
  20. 深度学习:欠拟合问题的几种解决方案

热门文章

  1. 计算机发展趋势 五笔型码,计算机五笔识别码字有哪些
  2. 按键精灵手机助手计算时间差
  3. 计算机毕业设计Python+django 网上外卖订餐系统(源码+系统+mysql数据库+Lw文档)
  4. mysql网吧管理系统_网吧收银系统 网吧的收费管理系统 - 下载 - 搜珍网
  5. ectouch——wap端商城の数据表字典
  6. 快来,女神节已过,这边的大奖还没人领~【每一个女性都值得被赞美】 ——用ADC制奖状,赢大奖
  7. 软件测试 | 状态迁移法
  8. JavaScript系列之注释
  9. MT7628学习笔记(4)——固件烧录(TFTP方式)
  10. Python 爬虫 ~ Prison Oriented Programming。