简单的说JDK是面向开发人员利用的SDK,它供给了Java的开发情况和运行情况。SDK是Software Development Kit 一般指软件开发包,能够包罗函数库、编译法式等。
JDK就是Java Development Kit
JRE是Java Runtime Enviroment是指Java的运行情况,是面向Java法式的利用者,而不是开发者。
假设安拆了JDK,会发同你的电脑有两套JRE,一套位于 \jre 别的一套位于 C:\Program Files\Java\j2re1。4。1_01 目次下,后面那套比前面那套少了Server端的Java虚拟机,不外间接将前面那套的Server端Java虚拟机复造过来就行了。
并且在安拆JDK能够抉择能否安拆那个位于 C:\Program Files\Jav a 目次下的JRE。假设你只安拆JRE,而不是JDK,那么只会在 C:\Program Files\Java 目次下安拆独一的一套JRE。
JRE的地位就象一台PC机一样,我们写好的 Win32利用法式需要操做系统帮我们运行,同样的,我们编写的Java法式也必需要JRE才气运行。
所以当你拆完JDK后,假设别离在硬盘上的两个差别处所安拆了两套JRE,那么你能够想象你的电脑有两台虚拟的Java PC机,都具有运行Java法式的功用。所以我们能够说,只要你的电脑安拆了JRE,就能够准确运行Jav a利用法式。
1、为什么Sun要让JDK安拆两套不异的JRE?那是因为JDK里面有良多用Java所编写的开发东西(如javac。
exe、jar。exe等),并且都放置在 \lib\tools。jar 里。从下面例子能够看出,先将tools。jar改名为tools1。jar,然后运行javac。exe,展现如下成果: Exception in thread "main" ng。
NoClassDefFoundError: com/sun/tools/javac /Main 那个意思是说,你输进javac。exe与输进 java -cp c:\jdk\lib\tools。jar ols。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被施行有很大的关系。
3、介绍JVM JRE目次下的Bin目次有两个目次:server与client。那就是实正的jvm。dll所在。 jvm。dll无法零丁工做,当jvm。dll启动后,会利用explicit的办法(就是利用Win32 API之中的LoadLibrary()与GetProcAddress()来载进辅助用的动态链接库),而那些辅助用的动态链接库(。
dll)都必需位于jvm。dll所在目次的父目次之中。因而想利用哪个JVM,只需要设置PATH,指向JRE所在目次底下的jvm。dll。