码迷,mamicode.com
首页 > 其他好文 > 详细

基础面试题: JDK 和 JRE

时间:2020-10-30 13:07:30      阅读:26      评论:0      收藏:0      [点我收藏+]

标签:run   server   功能   error:   翻译   jre   安装   内容   files   

1.定义:

JDK 是 Java Development Kit,它是功能齐全的 Java SDK。它拥有 JRE 所拥有的一切,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译程序。

JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。但是,它不能用于创建新程序。

  1. 区别:
    JRE主要包含:java类库的class文件(都在lib目录下打包成了jar)和虚拟机(jvm.dll);

JDK主要包含:java类库的 class文件(都在lib目录下打包成了jar)并自带一个JRE。那么为什么JDK要自带一个JRE呢?而且jdk/jre/bin下的client 和server两个文件夹下都包含jvm.dll(说明JDK自带的JRE有两个虚拟机)。

  1. 难点:
    如果安装了JDK,会发现你的电脑有两套JRE,一套位于C:\Program Files\Java\jre7, 另外一套位于 C:\Program Files\Java\jdk1.7.0_72\jre目录下。
    JRE的地位就象一台PC机一样,我们写好的Win32应用程序需要操作系统帮我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。所以当你装完JDK后,如果分别在硬盘上的两个不同地方安装了两套JRE,那么你可以想象你的电脑有两台虚拟的Java
    PC机,都具有运行Java程序的功能。所以我们可以说,只要你的电脑安装了JRE,就可以正确运行Java应用程序。

  2. 问题:
    a、为什么Sun要让JDK安装两套相同的JRE?
    这是因为JDK里面有很多用Java所编写的开发工具,如javac.exe、jar.exe等,这些命令放置在 C:\Program Files\Java\jdk1.7.0_72\bin目录里。
    因为他们是java编写的命令,所以要依靠java的jar包,这些jar包存放在C:\Program Files\Java\jdk1.7.0_72\lib目录里
    如果将C:\Program Files\Java\jdk1.7.0_72\lib\目录里面的tools.jar改名为tools1.jar,然后运行javac.exe,显示如下结果:
    Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main
    但是输入 java -cp C:\Program Files\Java\jdk1.7.0_72\lib\tools1.jar com.sun.tools.javac.Main
    会得到与javac.exe相同的结果。
    从这里我们可以证明javac.exe只是一个包装器(Wrapper),而制作的目的是为了让开发者免于输入太长的指命。
    而且我们可以发现C:\Program Files\Java\jdk1.7.0_72\bin目录下的程序都很小,不大于29K,从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写,所以也是Java应用程序,因此要使用JDK所附的工具来开发Java程序,也必须要自行附一套JRE才行,所以位于C:\Program Files\Java\jdk1.7.0_72\jre目录下的那套JRE就是用来运行一般Java程序用的。

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

推荐阅读:

  • 进程同步的五种机制以及优缺点(翻译)

  • redis五种数据类型的实现方式,常用命令,应用场景

  • redis和memcahed的共同点,区别以及应用场景

  • Overload和Override的区别

基础面试题: JDK 和 JRE

标签:run   server   功能   error:   翻译   jre   安装   内容   files   

原文地址:https://blog.51cto.com/14977428/2545168

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!