JDK、JRE、JVM之间的关系

JDK、JRE、JVM之间的关系
如果安装了JDK,会发同你的电脑有两套JRE,
一套位于 <JDK安装目录>/jre
另外一套位于 C:/Program Files/Java/j2re1.4.1_01 目录下
后面这套比前面那套少了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等),而且都放置在 <JDK安装目录>/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),而制作的目的是为了让开发者免于输入太长的指命。而且可以发现<JDK安装目录>/lib目录下的程序都很小,不大于29K,从这里我们可以得出一个结论。就是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。


2、如果一台电脑安装两套以上的JRE,谁来决定呢?
这个重大任务就落在java.exe身上。Java.exe的工作就是找到合适的JRE来运行Java程序。
java.exe依照底下的顺序来查找JRE:
自己的目录下有没有JRE;
父目录有没有JRE;
查询注册表:
[HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment]
所以java.exe的运行结果与你的电脑里面哪个JRE被执行有很大的关系。



1) Not exactly, java executable is part of one JRE on your path. Unless you put java (.exe?? There is no java.exe on unix) somewhere else.

2) Another problem is if you put two imcompatable JREs on your machine, it might cause your ObjectInputStream corrupted.

3) For developer's machine, j2sdk without another JRE is the best choice.
Add one more:

Even j2sdk (JDK is the old name) is free, but it is illegal to distribute j2sdk with your product. Therefore if your product required j2sdk to run. Then you must require your client to download it from Sun and install it before instalation of your product. What a headache! Sad

On the opposite, you can distribute JRE with your application freely.

javac is Sun's version of java compiler, not a wrapper. Like any other executables, it uses other libraries such as some dll on windows, some shared libraies on Unix. It also uses some jar files came with it. That is just how it is, and how it works.

It is quite normal, Isn't it?

javachina wrote:
1) Not exactly, java executable is part of one JRE on your path. Unless you put java (.exe?? There is no java.exe on unix) somewhere else.

2) Another problem is if you put two imcompatable JREs on your machine, it might cause your ObjectInputStream corrupted.

3) For developer's machine, j2sdk without another JRE is the best choice.



java -cp c:/jdk/lib/tools.jar com.sun.tools.javac.Main

javachina wrote:
1) Not exactly, java executable is part of one JRE on your path. Unless you put java (.exe?? There is no java.exe on unix) somewhere else.

2) Another problem is if you put two imcompatable JREs on your machine, it might cause your ObjectInputStream corrupted.

3) For developer's machine, j2sdk without another JRE is the best choice.



java -cp c:/jdk/lib/tools.jar com.sun.tools.javac.Main

### 回答1: JDKJava Development Kit)、JREJava Runtime Environment)和JVMJava Virtual Machine)都是Java平台的重要组成部分。JDK包含JRE和一些开发工具,JRE包含JVMJava核心类库,而JVM则是Java程序的运行环境。简而言之,JDK是开发Java程序的必备工具,JRE是运行Java程序的必备环境,JVM则是在JRE上运行Java程序的核心组件。 ### 回答2: JDKJava Development Kit),JREJava Runtime Environment)和JVMJava Virtual Machine)是Java开发和运行环境中不同组件之间关系JDKJava开发工具包,它提供了开发人员所需要的编译、调试、运行和部署Java程序的工具和库。JDK包含了Java编程语言的编译器(javac)、Java类库、调试工具和其他辅助工具。 JREJava运行环境,它是JDK的子集,包含了Java虚拟机(JVM)和Java类库。JRE的主要作用是用于运行Java程序,而不包括用于开发Java程序的工具和库。 JVMJava虚拟机,它是Java程序在计算机上运行的虚拟机。JVM负责加载和执行Java字节码(编译后的Java程序)并提供程序运行时所需的其他功能,如垃圾回收和内存管理。 JDKJREJVM之间关系是这样的:JDK 包含了 JRE,而 JRE 含有 JVM。也就是说,JDK 提供了开发Java程序所需的工具和库(包含 JRE),而 JRE 则提供了运行Java程序所需的环境(包含 JVM)。 总结起来就是,JDK 包含了开发和运行Java程序所需的工具、库和环境,JREJDK 的一个子集,只包含运行Java程序所需的环境,而 JVMJava程序在计算机上运行的虚拟机。 ### 回答3: JDKJava Development Kit),JREJava Runtime Environment)和JVMJava Virtual Machine)是Java编程中非常重要的概念。它们之间有着密切的关系JDKJava开发工具包,它包含了用于开发、编译和调试Java应用程序的各种工具和库。它提供了Java的开发环境,包括编译器、调试器、集成开发环境(IDE)等。JDK还提供了许多标准的Java类库和API(应用程序接口),供开发人员使用。 JREJava运行时环境,它是在计算机上运行Java应用程序所必需的。它包含Java虚拟机(JVM)和许多运行时库(Runtime Libraries),用于执行Java字节码并提供各种功能和服务,如内存管理、线程管理和异常处理等。JRE只能用于运行Java程序,而不能用于开发新的Java应用程序。 而JVMJava虚拟机,它是整个Java平台的核心部分。它负责解释和执行Java字节码(由Java编译器生成的中间代码),并将其转换为对应操作系统能够理解的机器语言。JVM提供了一种独立于硬件和操作系统的执行环境,使得Java程序可以在不同的平台上运行。 综上所述,JDKJava开发工具包,提供了用于开发和编译Java应用程序的工具和库;JREJava运行时环境,用于运行Java应用程序;而JVMJava虚拟机,负责解释和执行Java字节码。JDK依赖于JRE,因为它需要在JRE的基础上才能开发和编译Java程序。而JRE依赖于JVM,因为它需要JVM来执行Java字节码。因此,JDKJREJVM三者密切相关,相互配合,构成了完整的Java开发和运行环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值