JDK包含JRE,而JRE包含JVM。
总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。
一般在安装JDK时,会让你选择是否安装公共JRE。如果安装了公共JRE那么电脑中就会存在两套JRE。
这是因为JDK中的工具也是由java代码编写的,所以要使用这些工具那么就需要JRE的支持,为了保证JDK的相对独立性,所以JDK中附带安装了一套私有的JRE。主要用于运行编译调试等工具。
那么如果一台电脑中存在多个JRE,那么应该如何选择?查找顺序是这样:
可否在java.exe目录下寻找到java.dll文件
可否在java.exe的上级目录找到jre目录
可否在注册表HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment\查看CurrentVersion的键值指向哪个JRE
比如安装了公共JRE那么他会在注册表中记录版本与路径信息并且将java.exe拷贝到Winsows/System32目录下。由于该目录已经添加到环境变量因此不需要额外添加环境变量就可以使用java命令。
那么这时执行java命令。
首先他会到Winsows/System32目录下查找是否有java.dll文件,没有找到继续到上级目录查找是否有jre目录,也没找到然后到注册表中查找。
如果配置了java_home,首先到java_home/bin目录下查找java.dll文件没有找到,然后到上级目录寻找jre目录找到后加载java.dll文件。
JVM它是整个java实现跨平台的最核心的部分主要用来执行class文件,JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。JVM+Lib=JRE
原文地址:http://a4boy.blog.51cto.com/7938796/1888593