JRE和JDK的区别是什么 ?(jdk和jre的区别,你真的懂吗?)

2022-09-30 07:22:10 发布:网友投稿
热度:96

JRE和JDK的差别是什么 ?(jdk和jre的差别,你真的懂吗?)


大家确定在安装JDK的时候会有选择是否安装单独的jre,一般都会一起安装,我也建议大家这样做。因为这样更能赞助大家弄清晰它们的差别:

Jre 是java runtime environment, 是java程序的运行环境。既然是运行,当然要包括jvm,也就是大家熟习的虚拟机啦,还有所有java类库的class文件,都在lib目录下打包成了jar。大家可以自己验证。至于在windows上的虚拟机是哪个文件呢?学过MFC的都知道什么是dll文件吧,那么大家看看jre/bin/client里面是不是有一个jvm.dll呢?那就是虚拟机。

Jdk 是java development kit,是java的开发工具包,里面包括了各种类库和工具。当然也包含了另外一个Jre. 那么为什么要包含另外一个Jre呢?而且jdk/jre/bin同时有client和server两个文件夹下都包括一个jvm.dll。解释是有两个虚拟机的。这一点不知道大家是否注意到了呢?

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

记得在环境变量path中设置jdk/bin路径麽?这应当是大家学习Java的第一步吧,老师会告知大家不设置的话javac和java是用不了的。确切jdk/bin目录下包括了所有的命令。可是有没有人想过我们用的java命令并不是 jdk/bin目录下的而是jre/bin目录下的呢?不信可以做一个试验,大家可以把jdk/bin目录下的java.exe剪切到别的处所再运行 java程序,发明了什么?一切OK!

那么有人会问了?我明明没有设置jre/bin目录到环境变量中啊?

试想一下如果java为了供给给大多数人应用,他们是不须要jdk做开发的,只须要jre能让java程序跑起来就可以了,那么每个客户还须要手动去设置环境变量多麻烦啊?所以安装jre的时候安装程序主动帮你把jre的java.exe添加到了体系变量中,验证的办法很简略,大家看到了体系环境变量的 path最前面有“%SystemRoot%system32;%SystemRoot%;”这样的配置,那么再去Windows/system32下面去看看吧,发明了什么?有一个java.exe。

如果强行能够把jdk/bin挪到system32变量前面,当然也可以迫使应用jdk/jre里面的java,不过除非有必要,我不建议大家这么做。应用单独的jre跑java程序也算是客户环境下的一种测试。


通俗点来说: jdk是java的开发包,其中包含jre;jre仅仅是java的运行时环境;而JDK包含了同版本的JRE,此外还包含有编译器和其它工具

JDK是java开发工具包(java Development Kit)的缩写。它是一种构建在java平台上宣布的运用程序、apple和组件的开发环境。JDK是一切java运用程序的基本,所有的java运用程序是构建在这个之上的。它是一组API,也可以说是一些java Class。要成为一个Java程序员,JDK是必不可少的最根本的工具。

JRE是Java运行环境(Java Runtime Enviroment)的缩写。它根本上就和Java虚拟机是同一个概念。一般来说,在谈论一个具体的产品的时候,可以说“JRE”,而说到理论中的一个模型的时候,我们常用的是“Java虚拟机”。要应用Java程序,JRE是必不可少的环境。

如果机子里安装了多个版本的jdk,如下:

BEA Weblogic Server 7.0 自带一套 JDK1.3.1_02

下载了一套最新的JDK1.4.1_02

JBuilder9自带一套JKD1.4.1_02

Oracle8.1.7自带一套JRE1.1.7

Ration Rose自带一套JDK1.3

DreamWeaver自带一套JDK1.3

6套JRE,每套JRE都被各自安装到不同的目录,不会互相影响。当在掌握台履行java.exe,操作体系寻找JRE的方法如下:

先找当前目录下有没有JRE

再找父目录下有没有JRE

接着在PATH路径中找JRE(一般运行时从path中查找,依照path设置前后次序,以前面为准)

注册表HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\ 查看CurrentVersion的键值指向哪个JRE(一般XP下是这个:C:\Program Files\Java\jre6)

最常用的是在PATH路径中找JRE,一般情形下,自己的程序运行之前都会先在批处置文件里面临时设置PATH,把自己用的JRE放到PATH路径最前面,所以确定会运行自己带的JRE,不会造成版本凌乱。


JDK就是Java Development Kit.简略的说JDK是面向开发人员应用的SDK,它供给了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包含函数库、编译程序等。

JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的应用者,而不是开发者。

如果安装了JDK,会发同你的电脑有两套JRE,一套位于 \jre 另外一套位于 C:\Program Files\Java\jre1.5.0_15 目录下,后面这套比前面那套少了Server端的Java虚拟机,不过直接将前面那套的Server端Java虚拟机复制过来就行了。而且在安装JDK可以选择是否安装这个位于 C:\Program Files\Java 目录下的JRE。如果你只安装JRE,而不是JDK,那么只会在 C:\Program Files\Java 目录下安装唯一的一套JRE。

JRE的位置就象一台PC机一样,我们写好的Win32运用程序须要操作体系帮我们运行,同样的,我们编写的Java程序也必需要JRE能力运行。所以当你装完JDK后,如果分离在硬盘上的两个不同处所安装了两套JRE,那么你可以想象你的电脑有两台虚拟的Java PC机,都具有运行Java程序的功效。所以我们可以资源网说,只要你的电脑安装了JRE,就可以准确运行Java运用程序。

1、为什么Sun要让JDK安装两套雷同的JRE?

这是因为JDK里面有很多用Java所编写的开发工具(如javac.exe、jar.exe等),而且都放置在 \lib\tools.jar 里。从下面例子可以看出,先将tools.jar改名为tools1.jar,然后运行javac.exe,显示如下成果: Exception in thread "main"
java.lang.NoClassDefFoundError: com/sun/tools/javac /Main 这个意思是说,你输入javac.exe与输入 java -cp c:\jdk\lib\tools.jar com.sun.tools.javac.Main 是一样的,会得到雷同的成果。从这里我们可以证明javac.exe只是一个包装器(Wrapper),而制造的目标是为了让开发者免于输入太长的指命。而且可以发明\lib目录下的程序都很小,不大于2 9K,从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写,所以也是Java运用程序,因此要应用JDK所附的工具来开发Java程序,也必需要自行附一套JRE才行,所以位于C:\Program Files\Java目录下的那套JRE就是用来运行一般Java程序用的。

2、如果一台电脑安装两套以上的JRE,谁来决议呢?

这个重大义务就落在java.exe身上。Java.exe的工作就是找到适合的JRE来运行Java程序。 Java.exe按照底下的次序来查找JRE:自己的目录下有没有JRE;父目录有没有JRE;查询注册表: [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment] 所以java.exe的运行成果与你的电脑里面哪个JRE被履行有很大的关系。

ADD:(小结)

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

2.JRE -- java runtime 资源网environmentJRE是指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)

3.JDK -- java development kitJDK是java开发工具包,根本上每个学java的人都会先在机器上装一个JDK,那他都包括哪几部分呢?让我们看一下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是不同的)总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功效。

eclipse、idea等其他IDE有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发明他们只请求你选中jre路径就ok了。

欢迎工作一到五年的Java工程师朋友们参加Java技巧交换群:659270626

群内供给免费的Java架构学习资料(里面有高可用、高并发、高性能及散布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理应用自己每一分每一秒的时光来学习晋升自己,不要再用"没有时光“来掩盖自己思想上的懒散!趁年青,使劲拼,给未来的自己一个交代!


下一篇:女人一辈子(女人一生要经历这3个坎)
上一篇:最有效的止鼾妙招(这4个治疗打鼾的方法)