JVM、JRE、JDK之间的联系与区别

JVM、JRE、JDK之间的联系与区别

JVM (Java Virtual Machine)

​ JVM(Java虚拟机)是一个可执行Java字节码的虚拟机进程,用于解析编译后的字节码文件。 JVM屏蔽了与操作系统平台相关的信息,可以把字节码解释成具体平台上的机器指令执行,这也是Java的能够 “一次编译,到处运行” 的原因。

​ 既然JVM是“虚拟机”的意思,那么肯定要体现出来 : 可以把JVM类比为一台只针对Java程序的PC虚拟机,它通过实体计算机仿真各种计算功能来实现,JVM有自己完善的硬件架构,如处理器,堆栈,寄存器等,还有相应的指令集.

在Java的世界中,JVM的地位就像一台PC机器。JVM和PC物理机的宏观关系是这样的 :

JVM与物理PC的微观关系是这样的 :

Java世界中JVM与现实世界中的物理PC之间关系是这样的:

注意事项

JVM的核心任务是解释字节码文件,它不能运行字节码文件。因为JVM执行class还需要JRE下的lib类库的支持,尤其是rt.jar,这一点非常重要.

JRE (Java Runtime Environment)

​ 光有JVM还不能完成class的执行,需要搭配JRE才能正常运行程序员打好的jar包。因为在解释class的时候JVM需要调用解释所需要的类库lib,JRE里有运行.classjava.exe.

​ JRE是Java程序的运行环境,它包含JVM的标准实现及Java核心类库。需要注意的是 : JRE是Java的运行环境不是开发环境。JRE不包含任何开发工具,如:编译器、调试器等,因为JRE是面向Java程序(jar包)的,程序只需要运行不需要编译、调试等功能。如果只需要运行一些Java程序,只需要一个JRE就足够了,不需要安装JDK.

在Java的世界中,JRE的地位相当于是一台PC机器中的Windows操作系统. Windows操作系统可以运行.exe格式化的应用程序对应的JRE操作系统用于运行.jar格式的应用程序.

综上所述,Java世界中的JRE与现实世界中的PC操作系统之间关系是这样的 :

JDK (Java Development Kit)

JDK是java开发工具包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等。JDK是面向程序员的。

基本上每个学java的人都会先在机器 上装一个JDK,那它都包含哪几部分呢?

安装完jdk之后,切换至jdk的安装根目录,可以看到几个目录:bin、jre、src.zip、db、lib、include。

  • bin:开发工具。里面可以看到一些我们很熟悉的工具,jar、java、javac、javadoc、javap、jconsole、jhat、jmap、jstack、jstat。
  • jre:Java运行时环境。JRE包括Java虚拟机(JVM),类库和其他支持执行用Java编程语言编写的程序的文件(我们开发过程中经常使用到的核心类库就是在/jre/lib下)。
  • src.zip:Java类库源代码。构成Java核心API的所有类的Java编程语言源文件,(注意不是JVM源码)主要是想帮助开发人员学习和使用Java编程语言。
  • db:Oracle分发的Apache Derby关系数据库。
  • lib:其他库,开发工具所需的其他类库和支持文件,其中就有我们比较熟悉的 dt.jartools.jar
  • include:支持使用Java Native Interface和Java Virtual Machine(JVM)调试器接口进行本机代码编程的C语言头文件。

既然JDK安装目录中是包含JRE的,而JRE中是包含JVM的,所以电脑安装完JDK后就具备了开发Java源文件、编译class字节码文件、运行jar程序的功能。JDK直接打通了程序员与Java世界的壁垒,这就导致笔者到现在才搞清楚它们三者之间的关系,。

JVM、JRE、JDK三者之间的联系

综上所述,三者关系可以用下面一个场景来总结:

​ 程序员借助JDK可以写好.Java源代码,然后使用JDK自带的javac命令将源代码编译为.class字节码文件,最后使用JDK的jar -cvf命令打包为jar包,到这一步JDK的使命就完成了。有了jar包之后,下一步就是让jar跑起来,这一步就该JVM、JRE出场了,使用java -jar运行程序。首先是在JRE上运行这些字节码,具体到字节码执行时就需要JVM解析字节码文件,并承担将字节码命令映射到CPU指令集或OS的系统调用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值