JDK、JRE、JVM之间的关系

原创 2005年04月23日 21:22:00
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

JDK、JRE和JVM三者之间关系

JDK、JRE和JVM三者之间关系 很多程序员已经写了很长一段时间java了,依然不明白JDK,JRE,JVM的区别。今天个人总结一下它们三者的关系、区别。 JDK(Java Developmen...
  • geyouchao
  • geyouchao
  • 2016年06月14日 10:49
  • 6651

【J2SE】JDK、JRE、JVM三者间的关系

一、Java程序运行机制及运行过程 Java两种核心机制: ①Java虚拟机(Java Virtual Machine) ②垃圾收集机制(Garbage collection) 二、核心机制之Jav...
  • qq_26545305
  • qq_26545305
  • 2016年12月04日 16:04
  • 605

JDK、JRE、JVM三者关系

JDK:java开发套件 JRE:java执行环境(包含了java类别函式库.class和java虚拟机器jvm.dll) JVM:java虚拟机 1、当我们首次安装JDK的时候,那么我们电脑上一定会...
  • u010724583
  • u010724583
  • 2013年11月27日 15:54
  • 1890

JVM JRE JDK三者的区别和联系

一、 详细介绍 1、JVM -- java virtual machine JVM就是我们常说的java虚拟机,它是整个java实现跨平台的 最核心的部分,所有的java程序会首先被编译为.class...
  • a236209186
  • a236209186
  • 2016年06月23日 13:20
  • 2457

针对初学者了解JVM、JRE和JDK三者间的区别和联系

首先说Java编程语言,它是一门高级编程语言,具体由谁何时创建的,读者可以到网上查找相关资料,这里就不再赘述。那么,谈到Java就不得不谈谈JVM、JRE和JDK三者间的区别和联系。       JV...
  • qixin1889
  • qixin1889
  • 2016年04月28日 20:50
  • 1632

[java]JVM JRE JDK JIT之间的区别

java虚拟机(JVM)     使用java编程语言的主要优势就是平台的独立性。你曾经想知道过java怎么实现平台的独立性吗?对,就是虚拟机,它抽象化了硬件设备,开发者和他们的程序的得以操作系统。...
  • lzz957748332
  • lzz957748332
  • 2014年07月31日 00:29
  • 2754

JVM、JRE和JDK的关系与区别

关于JVM(JavaVisualMachine)、JRE(JavaRuntimeEnvironment)、JDK(JavaDevelopmentKit)的区别可以看下面一张图。 一张图读懂JVM、J...
  • Mrljdx
  • Mrljdx
  • 2015年04月03日 19:40
  • 608

区别:JDK,JRE,JVM,JIT

JRE:java runtime environment,就是平常电脑没有java要下载的java程序,把我搞死的那个sas就是...
  • wcq3692012
  • wcq3692012
  • 2014年04月07日 05:48
  • 1010

弄懂JDK、JRE和JVM到底是什么

JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jv...
  • songkai320
  • songkai320
  • 2016年07月04日 10:52
  • 10041

JDK JRE Android SDk JVM Dalvik 关系 图解 源码框架分析

1.为什么我配置了Android SDk 还要配置JDK呢?这两者到底是什么关系? 2.JVM是java程序的运行环境, Dalvik 是android程序的运行环境,而android是用java语...
  • liufangbaishi2014
  • liufangbaishi2014
  • 2016年09月01日 09:33
  • 885
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JDK、JRE、JVM之间的关系
举报原因:
原因补充:

(最多只允许输入30个字)