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. Java API —— IO流小结

    练习题: 1.复制文本文件 package cn.itcast_01; import java.io.BufferedReader; import java.io.BufferedWriter; im ...

  2. MapReduce编程系列 — 5:单表关联

    1.项目名称: 2.项目数据: chile    parentTom    LucyTom    JackJone    LucyJone    JackLucy    MaryLucy    Ben ...

  3. myeclipse快速开发配置

    1,打开MyEclipse 2013然后“window”→“Preferences” 2. 选择“java”,展开,“Editor”,选择“Content Assist”. 3. 选择“Content ...

  4. tahoma字体对中文字的影响

    一提到tahoma字体大家都会想到,它是一个英文字体,对中文不会有影响. 但是今天就遇到一个问题,tahoma字体会影响中文字的显示,如: html代码: <div class="bo ...

  5. CXF客户端异常

    基于CXF2.3.0 Caused by: java.lang.InstantiationException: org.apache.cxf.wstx_msv_validation.WoodstoxV ...

  6. bzoj2482

    还是像以前那样维护下次出现位置,计算影响 其实不难,思维盲点,受到做最大子段和的影响 其实这里可以直接维护当前每个位置的子段和,再记录一个历史最大和 当然tag也需要记录当前tag和历史(距离上次pu ...

  7. BZOJ 3573 米特运输

    语文题... 原来除了hash还可以取对数啊orz #include<iostream> #include<cstdio> #include<cstring> #i ...

  8. UVA 821 Page Hopping 网页跳跃(BFS,简单)

    题意: 给一个无权有向图,可认为边的长度为1,求两点间的平均长度(即所有点对的长度取平均),保留3位小数.保证任意点对都可达. 思路: 简单题.直接穷举每个点,进行BFS求该点到其他点的距离.累加后除 ...

  9. Java应用调优指南之-工具篇

    1. 土法调优两大件 先忆苦思甜,一般人在没有Profile工具的时候,调优的两大件,无非Heap Dump 与 Thread Dump. 1.1 Heap Dump jmap -dump:live, ...

  10. Android -- Support包特性

    干货 每一个 Support 包版本后缀 vX 所代表的含义是他能够被使用的最低版本等级.之所以无法在更低版本进行使用的原因,是因为随着版本的升级,在新版本中有很多之前不支持的特性或者 API,因此如 ...