jdk、jre及jvm的关系

很多程序员已经干了一段时间java了依然不明白jdk与jre的区别。
JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。
JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。
如果安装了JDK,会发同你的电脑有两套JRE,一套位于 \jre 另外一套位于 C:\Program Files\Java\jre1.5.0_15 目录下,后面这套比前面那套少了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应用程序。

为什么Sun要让JDK安装两套相同的JRE?

这是因为JDK里面有很多用Java所编写的开发工具(如javac.exe、jar.exe等),而且都放置在 \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),而制作的目的是为了让开发者免于输入太长的指命。而且可以发现\lib目录下的程序都很小,不大于2 9K,从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写,所以也是Java应用程序,因此要使用JDK所附的工具来开发Java程序,也必须要自行附一套JRE才行,所以位于C:\Program Files\Java目录下的那套JRE就是用来运行一般Java程序用的。

如果一台电脑安装两套以上的JRE,谁来决定呢?

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

ADD:(小小结)

  1. JVM – java virtual machineJVM就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
  2. JRE – java runtime environmentJRE是指java运行环境。光有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。在JDK的安装目录里你可以找到jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。所以,在你写完java程序编译成.class之后,你可以把这个.class文件和jre一起打包发给朋友,这样你的朋友就可以运行你写程序了。(jre里有运行.class的java.exe)
  3. JDK – java development kitJDK是java开发工具包,基本上每个学java的人都会先在机器上装一个JDK,那他都包含哪几部分呢?让我们看一下JDK的安装目录。在目录下面有六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的是以下四个文件夹:bin、include、lib、 jre。现在我们可以看出这样一个关系,JDK包含JRE,而JRE包含JVM。bin:最主要的是编译器(javac.exe)include:java和JVM交互用的头文件lib:类库jre:java运行环境(注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。
    eclipse、idea等其他IDE有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求你选中jre路径就ok了。

转自:http://www.cnblogs.com/myitm/archive/2011/05/03/2035942.html

另附jdk组件图
这里写图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我的理解之JAVA中的4种访问权限

一、Java中有四种访问权限,private、default(一般省略)、public、protected。 private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的属性以及方法只能被该类的对象访问,其子类不能访问&…

ssh连接阿里云服务器遇到的坑

1. 出现‘Host key verification failed.’ 解决方案在这里找到: https://askubuntu.com/questions/45679/ssh-connection-problem-with-host-key-verification-failed-error 2. 自动断开—每隔一两分钟就自动断开 参考: https://superuser.com/quest…

云服务器文件传输问题

最近再做一个web项目,目前决定先把应用放在云服务器上。我选择的云主机是aliyun的Ubuntu 16.04主机。部署好云主机环境后,就需要把我在本地开发好的程序上传到云主机了。刚开始打算用ftp协议来传输,于是参照网上的教程(Ubuntu 16.…

Naive Bayes Classifier - 朴素贝叶斯分类器

Naive Bayes Classifier - 朴素贝叶斯分类器 简介 在机器学习中,朴素贝叶斯分类器是一系列基于“贝叶斯原理”和“特征之间独立分布假设”的概率分类器的总称。把它的名称分成两部分来看,一部分是“贝叶斯”对应的是“贝叶斯原理”;另一部分…

PL/SQL Developer调试Oracle存储过程

1,选中存储过程,右键,点击Edit,会打开一个窗口,提示错误信息2,添加debug information3,开始调试4,点击调试窗口上面的按钮进行调试

TCP三次握手和四次挥手以及11种状态

TCP三次握手和四次挥手以及11种状态 1、三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK、SYN、FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连…

计算机网络体系结构——各层的功能

OSI七层架构 物理层主要功能:实现比特流的透明传输。基本单位:比特。 数据链路层主要功能 :封装成帧 。把帧从原MAC传到目的MAC(相邻节点之间帧的透明传输) 差错检测 循环冗余检测法。只检测有没有比特错误&#xf…

HTTP报文分析

一、HTTP请求报文解剖 HTTP请求报文由3部分组成(请求行请求头请求体): 下面我们基于socket编写一个简单的HTTP server import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.Inp…

SSM框架整合一(springmvc+spring+mybatis+maven+tomcat)

一,环境说明 jdk1.7.0_07(cmd命令行输入java -version查看),点击下载 eclipse Kepler Service Release 2 apache-maven-3.3.9(cmd命令行输入mvn -v查看),点击下载 apache-tomcat-7.0.52,点击下载 mysql-5.5.28-winx64&#xff0c…

如何在windows机器上安装apache ab

为什么要使用apache ab,apache ab的是用来干嘛的,apache ab的命令? 如果您是来找上面这些问题的答案,那么请立刻关掉当前页面,因为这篇文章是纯粹的安装教程,避免浪费时间。 一,安装环境 win…

低版本Eclipse如何快速设置黑色主题

低版本的Eclipse(例如Kepler Service Release 2),没有自带的黑色主题,并且在线安装黑色主题会报错 去网上找了一圈结果都是骗人的,这个时候别着急,只需三个简单的步骤即可完成黑色主题配置。 下面是设置完…

eclipse中配置jad反编译插件

1 下载Eclipse支持jad插件的jar包 将下载得到的net.sf.jadclipse_3.3.0.jar放到eclipse》plugins目录下 2 eclipse配置jad插件 下载jad.exe 3 设置文件关联

SpringCloud学习之路(一)-简单Demo

首先,我们先在C:\Windows\System32\drivers\etc路径下的hosts最后添加两个地址用于模拟服务端以及消费端的IP 127.0.0.1 dept-8001.com #微服务端127.0.0.1 client.com #消费端 SpringCloud的一个最基础Demo,本地真实模拟环境(服务的创建者以及消费者),这是我们Demo截图: 分为一…

eclipse工作区打不开的解决方案

今天上班的时候发现eclipse打开总是闪退,刚开始以为是eclipse的问题,后来才发现是工作区的问题。 分享出来,希望能够帮助遇到同样问题的人。 1 设置询问打开的工作区 eclipse安装目录\configuration\.settings\org.eclipse.ui.ide.prefs&a…

解决debug JDK source无法查看局部变量的问题

首先进入传送门:https://blog.csdn.net/majian_1987/article/details/51273609 进行上面的操作之后,这个时候我们来debug一下jdk源码,发现可以查看局部变量。但是这时候又发现一个问题,在我自己的代码里按住ctrl鼠标左键单击无法…

配置JAVA开发环境

1、首先去Oracle官方网站下载所需版本的JDKhttp://java.sun.com/products/archive/,然后安装,其实只需要安装jdk就可以了,不需要安装jre 2、按照后配置环境变量JAVA_HOME 然后在path最前面添加%JAVA_HOME%\bin; 3、cmd中输入java -version,提…

【JAVA基础篇】集合框架

一、集合框架图 Java集合框架主要包含两种类型的容器,一是集合(Collection),存储元素集合,二是图(Map),存储键(key)-值(value)对.Collection接口下面有两个重要的子接口List和Set,再下面是一些抽象类,最后是…

【JAVA基础篇】对象初始化过程

我们都知道,创建对象是由 new关键字调用构造方法 返回类实例(实际上还可以通过反射来创建实例)。 例如 : Person jack new Person(); 这句话到底做了什么事情呢 ? 其实就是讲对象的初始化过程。 1、 new 用到了Person.class,所…

eclipse指定JDK版本启动,解决version XXX of the JVM is not suitable for this product.Version:XXX 问题

问题描述:启动eclipse时,提示version 1.7.0 of the JVM is not suitable for this product.Version:1.8 or greater is required. 原因分析:原因是我的笔记本安装了多个JDK版本,但是现在我的JAVA_HOME配置的是jdk1.7的路径&#x…

【JAVA基础篇】IO流

一、流的概念 “对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务。” ――《Think in Java》 无论是系统、还是语言的设计中IO的设计都是异常复杂的。面临的最大的挑战一般是如何覆盖所有可能的因素,我们不仅仅要考虑文件、…