jdk和jre的区别

来源:互联网 发布:阿里巴巴淘宝城地址 编辑:程序博客网 时间:2024/05/16 15:27

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

JDK(java development kit),JDK是java开发工具包,里面包含了各种类库和工具(如 javac(Java compiler)、javaw.exe(相关网络协议软件))。当然也包括了另外一个Jre. 那么为什么要包括另外一个Jre呢?而且jdk/jre/bin同时有client和server两个文件夹下都包含一个jvm.dll。说明是有两个虚拟机的。这一点不知道大家是否注意到了呢? 让我们看一下JDK的安装目录。
在目录下面有六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的是以下四个文件夹:bin、include、lib、 jre。
现在我们可以看出这样一个关系,JDK包含JRE,而JRE包含JVM。

bin :开发工具的可执行文件, 最主要的是编译器(javac.exe);

include : java和JVM交互用的头文件;

lib:类库

jre : java运行环境(注意:这里的bin、lib文件夹和jre里的bin、lib是不同的);

db : 一个纯Java实现,开源的数据库管理系统(DBMS)java的内嵌数据库。

 
作为JDK实用程序,工具库中有七种主要程序。

Javac:Java编译器,将Java源代码转换成字节码。
  
Java:Java解释器,直接从类文件执行Java应用程序字节代码

appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。   

Jdb:Java调试器,可以逐行执行程序,设置断点和检查变量。

Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。   

Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。

JRE(java runtime environment),是指java运行环境。光有JVM还不能完成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。在JDK的安装目录里你可以找到jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。所以,在你写完java程序编译成.class之后,你可以把这个.class文件和jre一起打包发给朋友,这样你的朋友就可以运行你写程序了。(jre里有运行.class的java.exe)

相信大家都知道jdk的bin下有各种java程序需要用到的命令,与jre的bin目录最明显的区别就是jdk下才有javac,这一点很好理解,因为 jre只是一个运行环境而已。与开发无关,正因为如此,具备开发功能的jdk自己的jre下才会同时有client性质的jvm和server性质的 jvm, 而仅仅作为运行环境的jre下只需要client性质的jvm.dll就够了。

JDK,开发java程序用的开发包,JDK里面有java的运行环境(JRE),包括client和server端的。需要配置环境变量。

JRE,运行java程序的环境,JVM,JRE里面只有client运行环境,安装过程中,会自动添加PATH。

试想一下如果java为了提供给大多数人使用,他们是不需要jdk做开发的,只需要jre能让java程序跑起来就可以了,那么每个客户还需要手动去设置环境变量多麻烦啊?所以安装jre的时候安装程序自动帮你把jre的java.exe添加到了系统变量中,

总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。
而我们通常安装的eclipse、idea等其他IDE有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求你选中jre路径就可以了。

原创粉丝点击