1. 定义

JRE(Java Runtime Enviroment)是Java的运行环境。面向Java程序的使用者,而不是开发者。如果你仅下载并安装了JRE,那么你的系统只能运行Java程序。JRE是运行Java程序所必须环境的集合,包含JVM标准实现及 Java核心类库。它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。

JDK(Java Development Kit)又称J2SDK(Java2 Software Development Kit),是Java开发工具包,它提供了Java的开发环境(提供了编译器javac等工具,用于将java文件编译为class文件)和运行环境(提 供了JVM和Runtime辅助包,用于解析class文件使其得到运行)。如果你下载并安装了JDK,那么你不仅可以开发Java程序,也同时拥有了运 行Java程序的平台。JDK是整个Java的核心,包括了Java运行环境(JRE),一堆Java工具tools.jar和Java标准类库 (rt.jar)。

2. 区别

JRE主要包含:java类库的class文件(都在lib目录下打包成了jar)和虚拟机(jvm.dll);JDK主要包含:java类库的 class文件(都在lib目录下打包成了jar)并自带一个JRE。那么为什么JDK要自带一个JRE呢?而且jdk/jre/bin下的client 和server两个文件夹下都包含jvm.dll(说明JDK自带的JRE有两个虚拟机)。

记得在环境变量path中设置jdk/bin路径麽?老师会告诉大家不设置的话javac和java是用不了的。确实jdk/bin目录下包含了所有的命令。可是有没有人想过我们用的java命令并不是jdk/bin目录下的而是jre/bin目录下的呢?不信可以做一个实验,大家可以把jdk /bin目录下的java.exe剪切到别的地方再运行java程序,发现了什么?一切OK!(JRE中没有javac命令,原因很简单,它不是开发环境)那么有人会问了?我明明没有设置jre/bin目录到环境变量中啊?试想一下如果java为了提供给大多数人使用,他们是不需要jdk做开发的,只需 要jre能让java程序跑起来就可以了,那么每个客户还需要手动去设置环境变量多麻烦啊?所以安装jre的时候安装程序自动帮你把jre的 java.exe添加到了系统变量中,验证的方法很简单,去Windows/system32下面去看看吧,发现了什么?有一个java.exe。

3. 难点

如果安装了JDK,你的电脑就有两套JRE(JRE本身和JDK中的JRE),前面这套比后面那套少了Server端的Java虚拟机。

(1)为什么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目录下的程序都很小,不大于29K,从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写,所以也是Java应用 程序,因此要使用JDK所附的工具来开发Java程序,也必须要自行附一套JRE才行,所以位于JDK目录下的那套JRE就是用来运行一般Java程序 的。

(2)如果一台电脑安装两套以上的JRE,谁来决定呢?这个重大任务就落在java.exe身上。java.exe的工作就是找到合适的JRE来运 行Java程序。java.exe依照以下的顺序来查找JRE:1)自己的目录下有没有JRE;2)父目录有没有JRE;3)查询注册表: [HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment]。所以java.exe的运行结果与你的电脑里面哪个JRE被执行有很大的关系。

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

4. 最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。

JRE和JDK的区别相关推荐

  1. JRE和JDK的区别分别代表什么

    2019独角兽企业重金招聘Python工程师标准>>> JRE和JDK的区别分别代表什么 JDK JDK 是整个Java的核心,包括了Java运行环境(Java Runtime En ...

  2. java jre 与jdk的区别_学习java却不知道JRE和JDK的区别?看完这篇文章,让你受益匪浅...

    JRE和JDK的区别? 1.JRE是Java运行时环境 . 它是运行已编译的Java程序所需的所有程序的包,包括Java虚拟机(JVM),Java类库, java命令和其他基础结构. 但是,它不能用于 ...

  3. JRE和JDK的区别?

    JRE和JDK的区别? JRE(java rounting enviroment)安装JDK运行java程序所必须的环境集合,包含jvm标准实现及java核心类库,是运行java程序的所需要的环境 J ...

  4. JDK是什么?jre和jdk的区别?【JDK常见问题答疑】

    什么是JDK? JDK指的是Java Development Kit,它是一个开发Java应用程序所需的软件开发工具包.JDK包括Java编译器.Java虚拟机.Java类库等必要组件,以及用于开发. ...

  5. 详解JRE和JDK的区别

    2019独角兽企业重金招聘Python工程师标准>>> JDK JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工 ...

  6. [转载]帮你入门 详解JRE和JDK的区别

    JDK JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar).不论什么Java应用服务器实质都是 ...

  7. base——JRE和JDK的区别【转】

    关于jdk和jre 大家肯定在安装JDK的时候会有选择是否安装单独的jre,一般都会一起安装,我也建议大家这样做.因为这样更能帮助大家弄清楚它们的区别: Jre 是java runtime envir ...

  8. JRE和JDK的区别(笔记)

    记笔记的原因如下: 前提,本来环境是java8的,我想用java7去编译某一个文件. 结果不小心迷路到jre文件夹下了,发现找不到javac命令,只要java命令. 设置临时环境变量也不行. 最后想起 ...

  9. JRE和JDK的解释及区别

    JRE和JDK的解释: JDK:Java Development Kit,顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的.JDK包含了JR ...

  10. Java001 了解JRE、JDK以及JDK版本

    注:内容收集自网络 JRE 百度知道 https://baike.baidu.com/item/JRE/2902404?fr=aladdin JRE(Java Runtime Environment) ...

最新文章

  1. Gentoo 安装日记 14 (配置内核 :设备驱动)
  2. C++构造与析构(18) - 静态对象(static object)何时销毁
  3. hdu5720_贪心
  4. 一段js实现复制文本内容到剪切板
  5. docker 随笔记录
  6. 深度学习 占用gpu内存 使用率为0_2020年深度学习最佳GPU一览,看看哪一款最适合你!...
  7. python ocr识别身份证_Python+opencv+pytesseract实现身份证号码识别
  8. 微信公众号网页授权-java开发
  9. python tkinter教程 博客园_布同:如何循序渐进学习Python语言
  10. 信息安全技术——(九)基于MATLAB数字水印系统设计
  11. FT60F011A包含1Krom+EEPROM+Flash单片机IC方案开发
  12. Linux下Socket编程之TCP Server端
  13. 华文行楷字帖欣赏_任政行书唐诗字帖欣赏:工整秀丽、雄健挺拔!初学书法的好字帖...
  14. [渝粤教育] 西南科技大学 成本会计 在线考试复习资料
  15. 2013.10.6日在109机房维护电脑心得_红蜘蛛出现异常
  16. 2022-1-22 牛客C++项目 ——setitimer函数
  17. NE555波形发生器手把手教程之NE555内部结构(一)
  18. java程序的类体由两部分组成,Java程序中每个类的定义由类头定义、类体定义两部分组成,其中类体部分包括属性和____. (10....
  19. Web image标签 有些JPG格式照片不能显示问题 解释及解决
  20. 使用PyTorch进行迁移学习

热门文章

  1. Python 用异常处理改写猜数游戏程序
  2. 8051蜂鸣器程序c语言,单片机驱动蜂鸣器C51程序
  3. 中国科学院大学2017年高等代数考研试题
  4. 实战技巧:网站死链检测及处理方法!
  5. 路径规划(一) —— 环境描述(Grid Map Feature Map) 全局路径规划(最优路径规划(DijkstraA*star) 概率路径规划(PRMRRT))
  6. kX3552 驱动、安装、插件集合贴
  7. WPF界面框架的设计
  8. PXE工作流程(PXE启动报错处理)
  9. 计算机网络第七版谢希仁课后答案第二章(部分答案)
  10. 深度好文:这才是实际工作中的竞品分析