转载自:http://blog.csdn.net/gx1058742912/article/details/51033942

JDK与jRE的区别

JDK(java development kit):java 开发工具,包括一系列java命令,如javac(java compiler) 等;同时jdk包含jre,因为jdk其实是面向java开发人员的,开 发完之后还要进行调试运行等,这就需要jre了;

JRE(java runtime environment):java 运行时环境,java文件被javac编译过后形成字节码文 件,这个文件计算机是不能理解和处理的,需要有jvm(java virtual machine)处理后形成机器语言在传递给计算机处理 (这也是为什么说java具有平台无关性)。Jvm就存在于jre 中。可见,jre其实是面向java程序的使用者;

所以,当你需要开发一个java程序时,你需要的是jdk,但如果需要运行一个java程序,就需要jre了。让人迷惑的是,当你下载并安装jdk之后,会发现在jdk文件夹内部和外部同时存在jre文件夹(证明了jdk包含jre),下面我们来说说其中的原因:

内部jre:当你开发java程序时,需要用到一些javac之类的命令,就会调用jdk(java开发  工具)内部的jre;

外部jre:当你只需要运行一个java程序而不是开发时,就会调用外部的jre;

那么为什么要分两个呢?公用一个不就行了吗,还节省了资源。其实分为两个jre,更多的是为了提高性能和效率,打开两个jre的文件夹,对比一下会发现:

外部jre中,在其client文件夹里面,有个jvm.dll;内部jre中,多了个server文件夹,其中也有个jvm.dll文件,主要是两个vm的区别,使得内外部jre有不同的分工,并且能在各自的分工上做到最好(提高各自的效率和性能)。

附上oracle官网的一张截图:

(http://docs.oracle.com/javase/7/docs/)

从这张图中可以得到:JVM⊂JRE⊂JDK

说到这里,顺便提一下windows下环境变量中的path和classpath,毕竟好记性不如烂笔头!

安装好jdk之后,下一步就要配置环境变量了,怎么配置就不多说了,网上很多,简单的说一下为什么要分这两个来配置:

path变量:与其中的值相对应的路径下面是一些java命令程序,如javac;

Classpath变量:与其中值相对应的路径下面是程序需要用到的一些java提供的类(jar包);

有时也用到JAVA_HOME环境变量,它指向jdk的安装目录,Eclipse/tomcat等就是通过其找到并使用安装好的jdk。配置好之后,即可在任何目录下用java命令执行java程序。那么为什么系统可以在任何目录下使用JDK提供的命令呢?

其实环境变量就是能够让系统更快速方便的找到所需的东西,有兴趣的可以看一下windows系统变量中的path变量中已有的值,例如C:\Windows\system32;,按这个路径打开,会发现里面有很多可执行文件,比如cmd.exe,这就是为什么我们能够在“运行”窗口输入cmd之后就出现命令行的原因。说到这里,你也可以试试利用环境变量启动其他程序!

eclipse中的JDK与JRE:

其实写这篇文章的出发点就是因为在Eclipse中用maven时,被各种jre、jdk搞得混乱,于是决定弄清楚。先简单的介绍一下:

Eclipse:是一款集成开发的IDE,可以开发,编译,调试,运行代码等;

JDK:java开发工具,用来将.java文件编译成字节码文件;

JRE:java运行时环境,执行编译后得字节码文件;

Maven:一款项目管理工具;

Eclipse中其实内嵌了Java编译器,其编译器的作用等同于jdk中的javac,所以eclipse其实只需要jre就可以编译java文件(在eclipse中当你保存一个java类时,它就会自动编译这个java类,相当于在命令行中用了javac这个命令)。但如果你在eclipse中用了maven这样的工具,可能就无法编译了。因为maven默认使用javac来编译项目的,也就是需要jdk,而如果你的eclipse中某maven项目只指定了jre,就会出现无法编译的情况。就像是启动Tomcat只需要jre,原因是Tomcat中已经包括了源代码编译器,不需要jdk中的javac来编译。

Eclipse中有几处会用到jdk和jre的,下面列出几个,也是我混乱之处所在:

A. Window->preferences->Java->Installed JREs

这里Installed JREs中的可以理解为“全局常量”,这里设置好,之后新建的项目都默认用这里选定的jre或者jdk,但如果项目中用了maven的话,前面说了maven默认的是jdk中的javac来编译,所以如果这里还是用jre的话就会maven install出错,需要选择jdk才行。更改直接Add->Standard VM,点击directory,选择相应的jdk或者jre路径确定即可。

B.给不同的项目选择不同的jre

右击项目名称->build path->configure build path,选择libraries选项卡,选中jre:

点击edit:

可根据不同的需求选择不同的选项卡,并按照提示完成操作即可。注意,当你选择第二个选项卡“替代JRE”时,eclipse会跳转至installed jre中让你选择,因此,需要你提前在installed jre中配置好。

C. Window ->preferences->java->compiler

这里也会有一个jdk的选择,就是编译时jdk的版本,需要注意的一点是:

编译时的jdk版本不能高于项目build path中的jdk即运行时jdk,因为高版本中的有些功能在低版本中并不提供。例如,项目中用了泛型,编译时为jdk1.5但运行时为jdk1.4,虽然编译时不报错,但运行时就会出错,因为jdk1.4并不支持泛型;反过来,编译时为jdk1.4而运行时为jdk1.5,虽然编译时报错,但却可以正确运行。

转载于:https://www.cnblogs.com/zhile/p/8244516.html

JDK与JRE及其在Eclipse中的使用相关推荐

  1. Eclipse中JDK与JRE区别

    目录(?)[-] JDK与jRE的区别 eclipse中的JDK与JRE JDK与jRE的区别 JDK(Java development kit):Java 开发工具,包括一系列java命令,如jav ...

  2. 如何在官网下载java JDK或JRE的历史版本

    转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/53159952 背景 经常会碰到一种情况就是,临时需要某一 ...

  3. Eclipse中自带的编译器和引入的JRE(JDK)的关系

    目录 简单介绍: A  为工作空间设置编译器版本 : 无用 B  为工作空间引入JRE: C 为不同项目选择不同的编译器版本 :  Project Facets和Java Compiler D  为不 ...

  4. opt eclipse jre bin java_在Eclipse中指定JDK

    1.Windows下的Eclipse中的eclipse.ini -startup plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540 ...

  5. 在Eclipse中查看JDK类库的源代码

    转自:http://www.cnblogs.com/wuhenke/archive/2011/06/22/2087134.html 核心提示:在Eclipse中查看JDK类库的源代码!!! 设置: 1 ...

  6. 解决首次在eclipse中使用maven构建hadoop等项目时报Missing artifact sun.jdk:tools:jar:1.5.0的问题...

    问题原因: eclipse中的maven插件默认没有引用环境变量,所以找不到jdk的路径,也就找不到tool.jar. 解决办法: 步骤如下: 1.关闭eclips 2.在eclipse的解压目录中与 ...

  7. Eclipse中查看JDK类库的源代码

    在Eclipse中查看JDK类库的源代码!!! 设置: 1.点 "window"-> "Preferences" -> "Java&quo ...

  8. JDK、JRE、eclipse安装教程

    emmm-.. 换系统了,重装软件真的很麻烦,有些东西很久没碰都忘记了 然后,我决定记录一下,在网上找教程也不一定合适自己 何况有些教程看了也是浪费时间. 从安装jdk开始吧 http://www.o ...

  9. Eclipse中关联并调试JDK源码

    eclipse关联JDK源码的一般步骤: 1.依次选择Window -> Preferences: 2.依次选择Java -> Installed JREs -> Jre- -> ...

最新文章

  1. 1024 鲲鹏开发者技术沙龙·福州站圆满收官!给程序员的福利你收到了吗?
  2. UNet为什么在医学图像分割表现好?
  3. Web技术栈中不可或缺的Linux技术
  4. 【FPGA】SRIO例子程序仿真分析实践
  5. 十大不变计算机网络安全法则
  6. JavaScript对象及初始面向对象
  7. 多线程 循环 锁_大多数人还不清楚的iOS多线程
  8. BZOJ3714: [PA2014]Kuglarz 最小生成树
  9. 【优化算法】水基湍流优化算法(TFWO) 【含Matlab源码 1585期】
  10. Express全系列教程之(十):渲染jade模板引擎
  11. android解析xml nbsp报错,Android Studio 3 AndroidManifest.xml报错error: unknown eleme
  12. java informix_Informix 数据库的数据类型
  13. PHP替换指定字符 阿星小栈
  14. mysql emoji 问号_mysql数据库怎么存入emoji表情,更改utf8mb4后为什么出现全是问号...
  15. 计算机科学与技术军训,计算机科学与技术学院召开2018级新生军训动员大会
  16. IOS模拟器怎么安装应用程序
  17. 从零开始制作STM32F103RCT6小车(一)
  18. 【工大SCIR】基于动态图交互网络的多意图口语语言理解框架
  19. 十二、在PPT中添加页码
  20. java 为什么双亲委派_双亲委派机制及使用原因是什么?

热门文章

  1. Falsy Bouncer(第二种解决方式)
  2. JDBC链接MySQL和Oracle
  3. 基本select语句的生命周期
  4. 不会出现这样的情况吧
  5. Tomcat多实例和负载均衡
  6. jq实现点事图片移动_新品速递 | 移动云图片文字识别类产品全新版本惊喜登场...
  7. win10开机慢怎么解决_细说Win10启动慢怎么办
  8. P1433 吃奶酪(状压dp)
  9. mysql 事件计划区别_MySQL 计划事件
  10. 阿里云服务网格 ASM 发布新功能:提供更精细化的服务治理能力