`
I_am_kevin
  • 浏览: 145373 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

JDK-JRE-JVM-SDK的分析理解

阅读更多

JDK里面的工具也是用JAVA编写的,它们本身运行的时候也需要一套JRE,如C:\Program Files\Java\jdk1.5.x\目录下的JRE。而C:\Program Files\Java\目录下的JRE是用来执行我们自己编写的JAVA程序。当然,两套JRE中的任何一套都可以用来执行我们自己编写的JAVA程序,但是JDK里面的工具只能由C:\Program Files\Java\jdk1.5.x\目录下的JRE来执行。


也就是说
jdk(java development kit)是开发工具包,相当于是一个编译器。
jre(java runtime environment)是运行环境,相当于jvm虚拟机。jdk开发出来的java程序必须在jvm中运行,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 machine
JVM就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
2.JRE -- java runtime environment
JRE 是指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 kit
JDK是 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了。

-----------------------------------------------------------

关于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是面向开发人员使用的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" 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被执行有很大的关系。

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。
---------------------------------------------------------------


之前学java安装的都是jdk,而在公司安装的是j2re,有点搞不清楚两者关系,上网搜了一下,如下:

通俗点来说: 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
Oracle 8.1.7自带一套JRE1.1.7
Ration Rose自带一套JDK1.3
DreamWeaver自带一套JDK1.3

      6套JRE,每套JRE都被各自安装到不同的目录,不会互相影响。当在控制台执行java.exe, 操作系统 寻找JRE的方式如下:

先找当前目录下有没有JRE
再找父目录下有没有JRE
接着在PATH路径中找JRE
注册表HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\ 查看CurrentVersion的键值指向哪个JRE

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

分享到:
评论

相关推荐

    jdk-8u231最新32位和64位版本下载

    对于Java开发者来说,JDK是必不可少的,因为它包含了Java编译器(javac)、Java虚拟机(JVM)、Java运行时环境(JRE)、Java文档生成器(javadoc)以及各种实用工具,如jar打包工具等。JDK 8u231是Oracle公司发布的...

    jdk-8u401-windows-x64.exe

    JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。 JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。 SE(JavaSE),standard edition,标准版,是我们通常用的一个...

    jdk-8.0.302.8-hotspot

    【标题】"jdk-8.0.302.8-hotspot" 是Oracle公司发布的Java Development Kit(JDK)的一个版本,它包含了Java运行时环境(JRE)和用于开发Java应用程序的工具。这个特定的版本是8u302,意味着它是Java 8的更新302版,...

    AIX-JDK8-JRE8_64位.rar

    2. "Java8_64.sdk.tar" 是JDK 1.8的64位版本,除了包含JRE的所有内容外,还提供了Java编译器(javac)、打包工具(jar)、文档生成工具(javadoc)等开发者工具。 3. "aix JDK8 - 64.txt" 可能是一份关于AIX平台上的...

    jdk-8u221-windows-x64

    **Java JDK 8 SDK for Windows 64位详解** Java Development Kit (JDK) 是Java编程语言的核心组件,用于开发和运行Java应用程序。在提供的压缩包"jdk-8u221-windows-x64"中,我们聚焦的是Oracle公司发布的JDK 8的...

    windows环境java8环境安装包jdk-8u202-windows-x64

    7. **JRE**:Java运行时环境是运行Java应用程序所必需的,它包含Java虚拟机(JVM)、类库以及其他支持Java程序运行的组件。JRE不包含开发工具,仅用于执行已编译的Java代码。 8. **安装过程**:下载解压后,用户...

    jdk-8u251-windows-x64.rar

    总的来说,JDK 8u251是Java开发者在Windows 64位环境中必不可少的工具,它提供了一套完整的开发环境,包括Java编译器(javac)、Java运行时(JRE)、调试工具(JDB)以及丰富的API文档。通过使用这个版本,开发者...

    jdk-8u201-windows-i586.exe

    JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

    jdk-8u212-windows-x64.exe.zip

    3. **Java运行时环境(JRE)**:JRE是JDK的一部分,包含了运行Java应用程序所需的基本组件,包括JVM、Java核心类库和其他支持文件。 4. **Java文档生成器(javadoc)**:用于自动生成关于Java源代码的文档,以HTML...

    JDK,JRE,J2SDK,eclipse SDK之间的关系

    ### JDK、JRE、J2SDK与Eclipse SDK之间的关系 #### 1. JDK与JRE的关系 **JRE(Java Runtime Environment)**,即Java运行时环境,它包含了运行Java程序所需的基本组件,如Java虚拟机(JVM)、核心类库等。简单来说...

    jdk-8u181-windows-x64

    2. **运行环境**:JRE(Java Runtime Environment)是JDK的一部分,它提供了运行Java程序所需的环境,包括Java虚拟机(JVM)和Java核心类库。 3. **开发者工具**:JDK还包含了各种开发者工具,如`javadoc`用于生成...

    jdk与jre的区别

    简单来说,JDK是面向开发人员使用的SDK(Software Development Kit),它不仅提供了Java的运行环境,还包含了一系列用于Java开发的工具和服务。 ##### JDK的主要组成部分包括: - **编译器**:例如`javac`,用于将...

    jdk-11.0.2_windows-x64_bin.zip

    《深入理解Java开发环境:以JDK 11.0.2_windows-x64_bin.zip为例》 在软件开发领域,尤其是Java编程中,Java Development Kit(简称JDK)是必不可少的基础工具。JDK 11.0.2_windows-x64_bin.zip是一个专门为Windows...

    jdk-8u231-windows-x64.zip

    JDK包含了Java编译器(javac)、Java虚拟机(JVM)、Java类库、以及用于调试和性能分析的各种工具。它对于任何需要编写、测试和部署Java应用程序的人来说都是必不可少的。 【压缩包子文件的文件名称列表】只有一个...

    ibm-java-ppc64-sdk-7.0-10.50

    这个版本的SDK(Software Development Kit)包含了运行和开发Java应用程序所需的全套组件,包括Java运行时环境(JRE)和Java开发工具(JDK)。本文将详细讲解该版本的IBM Java SDK在AIX系统中的安装与使用,以及其...

    jdk-6u45-windows-x64.rar

    《深入理解Java SDK 6u45:专为64位Windows系统打造》 Java Development Kit(JDK)是开发和运行Java应用程序的基础,而JDK 6u45是Oracle公司发布的一个重要版本,主要面向64位的Windows操作系统。这个版本在前一版...

    AIX JDK1.8 JRE1.8 32位

    标题中的"AIX JDK1.8 JRE1.8 32位"指的是IBM的Java开发工具包(JDK)和Java运行环境(JRE)的32位版本,这两个组件都是针对AIX操作系统设计的。AIX,全称Advanced Interactive eXecutive,是IBM推出的一种基于UNIX的...

    jdk与jre的区别.

    3. **JVM、JRE和JDK的关系** - **JVM**(Java虚拟机)是JRE的核心部分,负责执行Java字节码。 - **JRE** 包含了JVM以及运行Java程序所需的基本类库和其他资源。 - **JDK** 包含了JRE的所有组件,并增加了用于...

    Java文档-jdk-6u10-docs-java类库6.0-高压缩第二部分

    在使用和分发Java SDK或JRE时,了解这些信息是非常重要的,因为它们规定了软件的使用限制和权利。 **关键知识点:** 1. **Java API**:Java API文档是开发者的必备工具,提供了类库的所有公共接口和实现。 2. **...

Global site tag (gtag.js) - Google Analytics