学习java这么久了,突然发现自己对JDK和JRE还没有一个清晰的概念,故在网上搜集了一些相关资料并整理下来,填补一下自己的知识断层。
JDK和JRE
----------------
JDK是Java Development Kit的缩写,即java开发工具包,是开发人员使用的SDK,它提供java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。
JRE是Java Runtime Environment的缩写,即java运行环境,面向的对象是java的使用者,而非开发者。
说白了,JRE只提供用来运行java程序的环境,而JDK不仅可以提供JRE的功能,而且还提供java开发和代码编译的功能。
在安装JDK时会选择是否安装单独的jre,如果选择安装,那么会在JAVA_HOME下会单独有一个jre文件夹,例如:
我安装的是jdk1.6.0_29,安装完后,目录的结构如下:
JAVA_HOME
\jdk1.6.0_29
\jre
\jre6
为什么会有两个jre目录呢?
----------------------------------------
这是因为JDK里面的开发工具有很多是用Java语言实现的(如javac.exe、jar.exe等,放置在 jdk1.6.0_29\lib\tools.jar 里),bin目录下的命令(例如:javac.exe)只是一个包装器(Wrapper),它们的作用是为了让开发者不必直接使用tools.jar(使用tools.jar需要输入很长的指命),所以jdk bin目录下的程序都很小,一般不大于200K。
从下面例子可以看出bin中的工具是用java实现的
-------------------------------------------------------
先将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
是一样的,会得到相同的结果。
既然这些工具是用java实现的,那么在使用这些工具的时候就必然要用到一套JRE,所以在JDK中自带了一套JRE,而且在这个JRE的bin目录中包含了client和server两个文件夹,其实就是两种jvm。
而位于JAVA_HOME目录下的那套JRE是用来运行一般Java程序用的。
JRE是java的运行环境,既然是运行环境,当然要包含jvm(也就是大家熟悉的虚拟机),还有所有java类库的class文件,这些文件在JRE的lib目录下被打包成了jar(rt.jar)。在windows上的虚拟机就是jre6/bin/client里面的jvm.dll。
如果电脑上安装了两个JRE,那怎么判定运行java的JRE是哪一个呢?
-------------------------------------------------------------------------------------------------
根据环境变量PATH的配置,系统会首先找到配置的的java.exe ;
(注:如果PATH最前面有“%SystemRoot%\system32;%SystemRoot%;”这样的配置,而且在Windows/system32下存在java.exe,那么系统会选择这个java.exe)
Java.exe的工作就是找到合适的JRE来运行Java程序,Java.exe依照底下的顺序来查找JRE:
- 自己的目录下有没有JRE;
- 父目录有没有JRE;
- 查询注册表: [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment]
所以java.exe的运行结果与你的电脑里面哪个JRE被执行有很大的关系。
关于环境变量path和classpath
----------------------------------------
你在命令行中输入简单的名称(例如:java,javac)就可以执行相关的程序,但是有一个问题,系统是怎么知道这些程序文件放在哪的呢?
这个就是环境变量path的功劳了,path中存放的是一个目录列表,并使用分号“;”间隔,系统就是通过检索这些目录来定位要执行程序位置。
同样的道理,当java编译器或java虚拟机需要使用一个类文件时(当你从类库中引用了一个类),它们也要先知道从哪里可以获得这些文件,环境变量classpath的工作就是设置这些类文件的位置,它存放的也是夜歌目录列表,并使用分号";"间隔,java编译器或虚拟机会通过它来寻找试图加载的类文件。
所以,如果想让你的JDK工作,就必须配置好这两个环境变量,系统会通过path来找到java或javac的位置,java或javac会通过classpath找到他们需要的类文件。
add
----------
eclipse、idea等其他IDE有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求你选中jre路径就ok了
参考:
http://www.cnblogs.com/myitm/archive/2011/05/03/2035942.html
http://shmilylq.iteye.com/blog/244351
http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jdkfiles.html
http://www.ics.uci.edu/~thornton/ics23/LabManual/SettingUpJava.html
相关推荐
jdk和jre的区别.doc
AIX JDK1.8 JRE1.8 IBM官网下载的安装包 jdk 和jre都有 32位,由于官网下载太慢,这里另存一份,需要的同学自取
免安装JDK1.7、JRE1.7,解压后配置操作系统环境变量即可使用
简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。JRE是Java Runtime Enviroment是指Java的运行环境,是面向...
网上摘录总结的关于jdk、jre、jvm的区别
java1.8jdk/jre.rar
jdk(java development kit),就是java的开发工具集,顾名思义就是你做开发用的,其中包括javac,也就是java compiler等
详细阐述了2者之间的区别,浅显易懂,希望大家能够喜欢
JDK和JRE安装视频
java6开发环境包含jdk和jre
JDK 所需jar包
jdk1.7.0_03,包括JDK和JRE。 免安装,解压就可以使用。
详解介绍了JDK与JRE的区别,介绍了安装JDK时两套JRE的区别,已经分析了在运行java程序时,是如果搜寻JRE的。最后,介绍了各环境变量的作用,以及变量的的搜寻方式。
JDK及JRE安装配置是否成功,包含jdk与jre,安装及测试是否成功,比较详细
jdk1.7.0_10安装后jdk中jre文件 目录:C:\Program Files (x86)\Java\jdk1.7.0_10\jre下的jre文件
【Java8】包含JDK和JRE,需要手动配置环境变量 1、系统变量,新增配置变量名为JAVA_HOME、变量值为JDK安装路径目录(到01_Java\jdk1.8)的系统变量 2、环境变量,新增%JAVA_HOME%\bin,%JAVA_HOME%\jre\bin的变量值 3...
jdk的classpath路径和环境配置 jdk的classpath路径和环境配置
java的开发工具集,顾名思义就是你做开发用的,其中来包括javac,也...所以jdk和jre的区别就度是一个用于开发,一个用于运行,联系就是他们都是java开发者所必备问的(除非你就像运行java程序,那么用jre就足够了)。