JDK、JRE和JVM的区别与联系

“温故而知新”,对于JDK、JRE和JVM之间的关系可能学了或者说看了不知道多少遍了,但记忆总是不深刻,通过这次总结希望自己能有一个更好的认知。

这里写图片描述
先来看一下这张图片,其实这张图片包含了所有的内容,只是我们看起来有时候不是那么的直观,下面我们再对JDK、JRE和JVM做一个单独的介绍。

一、JDK
JDK是Java开发工具包,是Sun Microsystems针对Java开发员的产品。

  JDK是整个JAVA的核心,包括了Java运行环境JRE(Java Runtime Envirnment)、一堆Java工具(javac(编译)/jar(打包)/java/jdb等)和Java基础的类库(即Java API包括rt.jar,rt.jar可以简单粗暴地理解为:它就是java源码编译成的jar包,也就是我们在java doc里面看到的所有的类的class文件(可以解压出来看一下))。
  
  JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是JVM,lib中则是JVM工作所需要的类库,而JVM(bin)和 lib和起来就称为JRE。

二、JRE
JRE是运行基于Java语言编写的程序所不可缺少的运行环境。也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。

  JRE中包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运行Java程序的必要组件。

  与大家熟知的JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。

三、JVM(关于JVM更为详细的内容可以参考对于JVM的重新认知

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

  只有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。

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

四、JDK和JRE区别

  去bin文件夹下你会发现,JDK有javac.exe而JRE里面没有,众所周知javac指令是用来将java文件编译成class文件的,这是你开发去做的事,用户是不会去做的。JDK还有jar.exe, javadoc.exe等等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。

五、JRE和JVM区别

  有些人觉得,JVM就可以执行class了,其实不然,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。

六、三者之间的关系
  对于初学者来说,可以简单的理解为就是JDK包含JRE,JRE又包含JVM的关系。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值