jvm,jre,jdk详解

一、总括来说,可以认为:

jdk=内置jre+java工具(javac.exe,jar.exe等)+java工具运行所需jar包

(dt.jar,tools.jar等)

jre=jvm+java基础类库(包括所有的标准类库,和扩展类)

jvm是java虚拟机,主要工作是解释自己的指令集(即字节码)到 CPU 的指令集或 OS

的系统调用。所有的java程序会首先被编译为.class的类文件,这种类文件可 以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解 释(具体的机器代码或者系统调用)给本地系统执行。不同操作系统有不同的jvm。

二、名词解释: 1.JDK Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。JDK里面有java的运行环境(JRE),包括client和server端的。 2.SDK Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。 3.JRE Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。JRE里面只有client运行环境,安装过程中,会自动添加PATH。 4.applet, Java小程序,在客户端执行。需要在客户机上安装jre,安装JRE时会将Java相关的信息写到注册表中,并为Web浏览器安装Java Plugin。Web浏览器的Java Plugin在运行Applet时,先会到Windows注册表中读取Java信息,再执行Applet程序。并且jre的版本需和浏览器匹配才可。(而普通的java程序只需解压jdk的压缩包并设置JAVA_HOME,Path,ClassPath的这些环境变量即可,如果设置了JAVA_HOME,就不需再设置JRE_HOME)

三、Java Applet Java小程序,也就是Java Applet,可以在Web浏览器中运行。Java Applet必须以脚本的形式嵌入到HTML页面中,才能在web浏览器中运行。 之前总以为本地安装了JDK,指定好JAVA_HOME和PATH环境变量,所有的Java程序就都可以运行了,后来发现Java Applet和一般的Java应用的运行环境配置是不一样的。

在Windows上运行Java应用程序,只要有JDK的二进制目录,并指定好JAVA_HOME和PATH就可以直接使用了,并不需要通过JDK的安装程序安装。所以,可以将安装好的JDK目录打个压缩包备份起来,以后重装系统或是给其他机器装Java环境时,直接将JDK的二进制压缩包拷贝过去,解压后就可以直接使用了。 但在Windows中,配置Java Applet的运行环境,仅指定JDK目录是不行的,必须要满足:

1. 用JRE安装程序包进行安装

2. JRE版本为 web浏览器提供了Java Plugin

3. JRE与Web浏览器的位长要一致,如都是32位,或都是64位的软件版本

这是因为,JRE安装时会将Java相关的信息写到注册表中,并为Web浏览器安装Java Plugin。Web浏览器的Java Plugin在运行Applet时,先会到Windows注册表中读取Java信息,再执行Applet程序。 这里要注意的是,JRE的版本不同,所支持的web浏览器和版本也不同。我本机的Web浏览器有IE8, Firefox16, Chrome19,安装JRE6u11后,只有IE8可以运行Applet;Firefox16下通过about:plugins可以看到有安装的Java Plugin,但无法运行Applet;而Chrome19下则显示没有Java Plugin。而安装JRE7u9后,所有的浏览器就都能运行Applet了。所以,最简单的话只需安装最新的JRE版本就行了。通常如果浏览器没有安装Java Plugin,在运行有Applet的网页时,会提示用户安装插件,一般直接安装后就可以了。 Java Tester这个网站,用于检查本地安装的JRE版本和软件厂商,同时可以检查Web浏览器是否可以运行Applet程序:

Java Tester - What Version of Java Are You Using? 对于一般用户,安装Applet运行环境是很简单的,但有时恰恰是Java开发人员的浏览器反而运行不了Applet。Java开发人员本机上往往会安装多个Java版本,有时直接将JDK目录移动或删除了,没通过Windows控制面板进行卸载,造成Windows注册表中还有残留的Java安装信息,运行Java应用没问题,但在Web浏览器中Java Plugin就找不到JRE来执行Applet了。 安装JRE后,Java控制面板上会出现一个Java图标,如果发现Java的图标显示不出来了,点击时提示找不到程序,如下图:

上面无法显示的Java图标,说明Windows上的JRE环境已经找不到了,需要重新安装JRE。正常可用的JRE环境,如下图:

点击Java图标,可以打开Java控制面板(javacpl),说明Windows上的JRE已经是可用的了。

综上,Java应用和Java Applet对运行环境的要求是不一样的。Java应用运行时,不需要找注册表,只要指定好JDK目录就能运行。而对于Applet小程序,Web浏览器中的Java Plugin要通过注册表来查找JRE环境,运行Java Applet。

因此,建议本地Java环境:

? 安装一个高版本的JRE,用于支持较新的Web浏览器运行Applet小程序

?

Java应用所需要的JDK,直接拷贝JDK二进制目录使用,不需要安装,多个JDK可并存,执行时确定使用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程序,发现了什么?

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4