码迷,mamicode.com
首页 > 编程语言 > 详细

【java学习】JDK、JRE、JVM的关系

时间:2017-04-15 19:31:42      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:java学习   常用   ack   命令行   mic   pac   tail   targe   block   

目录结构:

contents structure [-]

1,什么是JDK,JRE,JVM。

JDK:java development toolskit,包含java开发工具和jre。

JRE:java runtime enviroment,包含java运行环境和jvm。

JVM:java virtual machine,java虚拟机,用于保证java的跨平台。

三者的关系图:

技术分享

 

2,安装JDK为什么会出现两个JRE

我们在安装JDK的时候会出现两个JRE,一个JRE在JDK的外部,一个JRE在JDK的内部,这就是所谓的共用JRE和专用JRE。

2.1专用JRE

专用JRE位于JDK的内部,是专门用于运行JDK中包含的工具。专用JRE没有注册表的设置,通常位于(C:\Program Files\jdk1.7.0\jre)中。

配置JDK的时候,我们配置了环境变量path和classpath,其中classpath里配置了tools.jar包(java开发的基础包)。这时候我们将tools.jar包更改成另一个名字,会出现如下的错误:

技术分享

出现这种错误的原因就是我们更改了tools.jar的名字,java程序运行的过程中找不到tools.jar包了,所以报出错误。再查看jdk安装目录下的工具,几乎都是字节码(class文件),也就是说因此要使用JDK所附的工具来开发Java程序,所以自身需要附一套JRE才能运行。

2.2共用JRE

公共 JRE 可由其他 Java 应用程序使用,并且包含在 JDK 外部(通常位于 C:\Program Files\Java\jre1.7.0)。公共 JRE 会注册到 Windows 注册表(位于 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft)中。

2.3公共JRE和专用JRE对比

当我们只需要运行别人已经开发好的java程序,这时候用公用jre就可以了。但是如果我们需要开发JAVA程序,那么就必须安装JDK,JDK中包含专用JRE和开发工具,这些开发工具需要专用JRE才能够使用,也就说专用JRE是为我们开发JAVA程序准备的。还有两者的jre文件是有区别的,因此不能随便互相调换。

 

3,java跨平台的特点

技术分享

从图片中我们开出,java语言具有跨平台的特性,但是jvm不具有跨平台。

当我们在用javac命令编译java文件时,生成了jvm可以识别的字节码文件,这个过程不在jre里实现。当我们用java命令运行class文件的时,这个过程就是在jre里调用jvm来实现的。换句话说jre不具有编译功能。

 

4,jdk安装目录下各个文件的作用

bin  --  JDK中所包含的开发工具的可执行文件,PATH环境变量应该包含一个指向此目录的项。书中是这样说的:一些命令行工具,包括Java编译器的启动命令。bin目录下所有可执行文件的作用可以参考JDK/bin目录下的不同exe文件的用途文档

db  --   jdk从1.6之后内置了Derby数据库,它是是一个纯用Java实现的内存数据库,属于Apache的一个开源项目。用Java实现的,所以可以在任何平台上运行;另外一个特点是体积小,免安装,只需要几个小jar包就可以运行了。

include   --   java和JVM交互用的头文件;

lib  --   常用类库

jre  --  java运行环境

src --  部分源代码的压缩文件

javafx-src  --  图形和媒体包的源码压缩文件

 

5,参考文章

1,JDK/bin目录下的不同exe文件的用途

2,JDK各文件夹作用。

3,安装JDK的时候为什么会有两个jre文件

4,Java中JDK,JRE和JVM之间的关系

 

【java学习】JDK、JRE、JVM的关系

标签:java学习   常用   ack   命令行   mic   pac   tail   targe   block   

原文地址:http://www.cnblogs.com/HDK2016/p/6715035.html

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