理解JDK,JRE,JVM的区别和联系

随话说磨刀不误砍柴工,在讲联系和区别开始之前,我们可以先看一下JDK,JRE,JDK的官方说明,让我们对JDK,JRE,JDK有个初步的了解。

JVM:JVM是Java Virtual Machine(Java虚拟机)的缩写,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的,Java语言编译程序是运行在Java虚拟机上的目标代码。
从这句话中我们可以读出,JVM是一种规范,是一种虚拟计算机,只不过这个计算机是小型虚构出来的,计算机的实现是通过模拟计算机的功能来实现的。不同操作系统比如Windows操作系统有Windows版本的JVM,LInux系统有Linux版本的JVM,在我们编写Java代码只需要运行在JVM之上,具体怎么和操作系统交互,都交给JVM来处理。JVM有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统,和操作系统打交道,JVM本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是“一次编译,多次运行”。

JRE:Java运行环境(Java Runtime Environment,简称JRE)是一个软件,JRE可以让计算机系统运行Java应用程序(Java Application)。JRE的内部包括Java虚拟机(Java Virtual Machine,JVM)以及一些标准的类别函数库(Class Library)。它不包含开发工具(JDK)–编译器、调试器和其它工具。jre里有运行.class的java.exe,只要有了JRE,class字节码就可以运行。如果将Java程序变为字节码class,还需要JDK。

JDK:JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。可以对java文件进行编译。包括:bin:最主要的是编译器(javac.exe),include:java和JVM交互用的头文件,lib:类库, jre:java运行环境,

三者之间的联系和区别:
Java 是一门高级语言,这类语言不能直接运行在硬件上,必须运行在能够识别 Java 语言特性的虚拟机上,而 Java 代码必须通过 Java 编译器将其转换成虚拟机所能识别的指令序列,也称为 Java 字节码。自己写的Java源代码并不能直接运行在操作系统上,我们需要先对Java源代码进行编译成class字节码文件的格式,众所周知,Java有个庞大的类库作为支撑,Java的编写需要依赖这些类库,所以我们若想运行自己写的程序,这些类库也必须存在,在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。JVM+lib=JRE。要想得到字节码class文件,又要需要JDK的编译。
在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,而用户是不需要的。JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值