JAVA用到现在还是分不太清楚JDK,JRE,JVM这三者的区别与联系,一直都是模模糊糊的。所以今天整理下此中的关系。

简单说明:我们编写的.java文件经过JDK(JDK的bin目录下javac.exe程序)编译成.class文件。之后.class文件会运行在JRE环境下并被JVM解释后交给操作系统。下面先上个大家非常熟悉的图:

1.JDK:编译环境(编译类库 + 编译程序) + JRE 。

简单的说就是提供了Java的开发环境和编译环境一般包含JRE,主要用于开发JAVA程序,面向Java程序的开发者。就是个对.java文件的编译器,像eclipse、idea等其他IDEd都有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求你选中jre路径就ok了。

目录结构:
  bin:最主要的是包含编译器,javac.exe与java.exe(这里JRE也有相同的java.exe下面再讲)。  db:纯Java开发的数据库Derby,是一个开源的100%Java开发的关系数据库。  include:C语言头文件,支持用Java本地接口和JVM接口来本机代码编程。就是存放着java和JVM交互用的头文件。  jre:存放着一个完整的JRE(如果安装一个外部的JRE话会存在两个JRE分别是这里和C:\Program Files\Java目录下),执行bin目录下的工具。  lib:存放着用来支持jdk\bin下面的开发工具(编译器所需的)的非核心类库(tool.jar,还有dt.jar包含了BianInfo文件用来与IDE交互,显示定制javabean组件外观的)。

2.JRE:解释环境(解释类库 + 运行工具) + JVM。

对编译好的java程序提供了解释环境且包含了JVM,面向java程序的使用者。就是运行.class文件之后交给JVM。

目录结构:
  bin:包含运行工具,java.exe、javaw.exe、java-rmi.exe等等。  lib:包括java核心类,swing,rmi。java的API文档是对jre\lib\rt.jar的说明

3.JVM:java虚拟机,JRE的一部分。

1)我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分。所有的java程序会首先被编译为.class的类文件,这种类文件在JVM上执行解释,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释后交给本地系统执行。2)它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM 的主要工作是解释自己的指令集(即字节码)并映射到本地的CPU的指令集或OS的系统调用。Java语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其与操作系统无关,完成了跨平台性。JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件(class file)。类文件的组成包括 JVM 指令集,符号表以及一些补助信息。

JRE目录下的Bin目录有两个目录:server与client。这就是真正的jvm.dll所在。但是jvm.dll无法单独工作,当jvm.dll启动后,会使用explicit的方法(就是使用Win32 API之中的LoadLibrary()与GetProcAddress()来载入辅助用的动态链接库),而这些辅助用的动态链接库(.dll)都必须位于jvm.dll所在目录的父目录之中。因此想使用哪个JVM,只需要设置PATH,指向JRE所在目录底下的jvm.dll。 

4.两个JRE安装JDK时一定会在其子目录下面安装一个JRE,同时在安装的过程也会询问你是否要安装一个外部的JRE(在C:\Program Files\Java目录下)。如果我们选择安装则就同时拥有了两个JRE。这两个JRE其实功能上是没有任何分别的。

花费额外的硬盘空间在不同的目录下安装两个一模一样的JRE,并不是一种浪费。真正的原因是因为JDK里有很多用Java语言编写的开发工具(被存放在<jdk安装目录>\lib\tools.jar目录下)。JDK里面的工具几乎都是用Java所编写的,所以JDK本身就是一个Java程序,也就必须有一套JRE来执行这个JDK。因此<jdk安装目录>\jre下的那一套JRE是用来执行JDK这个Java程序的,而位于C:\Program Files\下的那套JRE才是用来执行我们所编写的Java程序。不过,两套中的任何一套JRE都可以用来执行我们所编写的Java程序,可以JDK内的开发工具在预设使用包装器(.exe)来启动的情况下,都会自己去选择<jdk安装目录>\jre底下的那套JRE。

1)jdk\jre:是用来运行这个JDK时用到的。2)C:\Program Files\Java\jre:是用来执行我们所编写的Java程序。

5.三个java.exe程序

我们会发现JDK下bin目录里有一个java.exe,然后外部JRE下bin目录里也有一个java.exe,当然JDK下的JRE里也包含了一个java.exe。那么问题来了,学挖机哪家强?哈哈,开个玩笑,最近被这个洗脑了。问题是我们起初在cmd里解释.class文件的时候到底运行了的哪一个java.exe呢?

先看外部的JRE在安装的时候会自动注册到操作系统的path(但在系统环境变量中的path中并没有包含该命令的路径值)里面一般是:System32文件夹下(该文件夹下包含:java.exe,javaw.exe,javaws.exe三个文件)面。因此我们只要安装了外部的JRE(即使JDK没有安装,环境变量没有配置)则运行Java程序时都是用的外部JRE的java.exe程序来运行的(即使安装了JDK且配置了环境变量,系统的默认path具有优先)。
 

 
    
  
												

对JDK,JRE,JVM的理解的更多相关文章

  1. 1、Java语言概述与开发环境——JDK JRE JVM理解

    一.理解概念: 1.JDK(Java Development Kit Java开发工具包) JDK是提供给Java开发人员使用的,其中包含Java的开发工具,也包括JRE,所以安装了JDK,就不用单独 ...

  2. JDK,JRE,JVM区别与联系-理解与概括

    我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析 ...

  3. JDK JRE JVM

    使用java很久,但是一直不清楚JDK,JRE,JVM直接的关系,今天特地梳理一下. JDK:Java Development ToolKit(Java开发工具包),JDK是整个JAVA的核心,包括J ...

  4. JDK,JRE,JVM区别与联系(ZZ)

    http://www.cnblogs.com/hencehong/p/3252166.html 我们开发的实际情况是:我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JD ...

  5. JDK,JRE,JVM区别与联系

    JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工 ...

  6. jdk jre jvm 关系

    很多朋友可能跟我一样,已经使用JAVA开发很久了,可是对JDK,JRE,JVM这三者的联系与区别,一直都是模模糊糊的. 今天特写此文,来整理下三者的关系. JDK : Java Development ...

  7. JDK,JRE,JVM区别与联系(转)

    JDK : JavaDevelopment ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具 ...

  8. 老李分享:JDK,JRE,JVM区别与联系

    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...

  9. JDK,JRE,JVM的区别与联系

    JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工 ...

随机推荐

  1. 车牌识别LPR(一)-- 研究背景

    在年尾用了几天的时间将2014年的所有工作都总结了一遍,将之前的文档综合了下. 以下是LPR系统,车牌识别的一些总结资料. 第一篇:LPR研究背景 汽车的出现改变了以往出行徒步和以马代步的时代,极大地 ...

  2. 1218. Episode N-th: The Jedi Tournament(bfs)

    1218 简答题 对于当前点 判断每个点是否可达 #include <iostream> #include<cstdio> #include<cstring> #i ...

  3. main cannot be resolved or is not a field

    今天在做XML解析的时候,总是给我报 XML Parsing Error: XML or text declaration not at start of entity 的错误,后来查了下讲大概意思是 ...

  4. fastdfs-client-java 文件上传

    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务,如相 ...

  5. linux shell ls -1 列显示文件

    /******************************************************************************* * linux shell ls -1 ...

  6. UVA 1660 Cable TV Network 电视网络(无向图,点连通度,最大流)

    题意:给一个无向图,求其点连通度?(注意输入问题) 思路: 如果只有1个点,那么输出“1”: 如果有0条边,那么输出“0”: 其他情况:用最大流解决.下面讲如何建图: 图的连通度问题是指:在图中删去部 ...

  7. acdream 1408 "Money, Money, Money" (水)

    题意:给出一个自然数x,要求找两个自然数a和b,任意多个a和b的组合都不能等于x,且要可以组合成大于x的任何自然数.如果找不到就输出两个0.(输出任意一个满足条件的答案) 思路:x=偶数时,无法构成, ...

  8. 自己用的框架写了一个PHP模版解析类

    <?php if(!defined('IS_HEARTPHP')) exit('Access Denied'); /** * template.class.php 模板解析类 * * @copy ...

  9. php.ini配置中文详解

    ;;;;;;;;;;; ; 警告 ; ;;;;;;;;;;; ; 此配置文件是对于新安装的PHP的默认设置. ; 默认情况下,PHP使用此配置文件安装 ; 此配置针对开发目的,并且*不是*针对生产环境 ...

  10. Oracle IO优化心得

    很多的时侯,做Oracle DBA的我们,当应用管理员向我们通告现在应用很慢.数据库很慢的时侯,我们到数据库时做几个示例的Select也发现同样的问题时,有些时侯我们会无从下手,因为我们认为数据库的各 ...