为什么JDK要自带JRE?JRE和JDK的区别是什么?
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等等。
标签:
相关推荐:
- []为什么JDK要自带JRE?JRE和JDK的区别是什么?
- []每日精选:如何读懂路由表本机地址?routeprint命令可以查看路由表
- []焦点快播:HttpClientPost怎么使用?HttpClientPost请求使用步骤详解
- []【时快讯】【Seata解析】TC处理全局事务和分支事务原理详解
- []网上订票抢票攻略 360极速抢票浏览器使用教程_世界快讯
- []Chrome缓存文件路径在哪?Chrome浏览器缓存文件路径查看方法
- []Insert Into select与Select Into哪个更快?数据库中SELECTINTO和SELECTO的区别 环球新动态
- []全球热文:hadoop3.2镜像挂载文件(附下载)
最新新闻:
- ListView怎么优化?ListView的四种优化方式及使用方法
- 【新视野】通信网中常见的普通光缆有哪些?GYTA型光缆的结构及结构
- 为什么JDK要自带JRE?JRE和JDK的区别是什么?
- 天天消息!汇编中DOSBox怎么使用?新建文件夹MyASM_Code(PSP)的使用方法
- 【软件设计】软件易维护性的因素有哪些?-当前关注
- Apex启动器最新版怎么下载?酷派7295A青春版刷机包
- 全球球精选!火狐浏览器如何安装flash_player?安装步骤
- 天天日报丨mysql怎么批量添加卡号?mysql数据库卡号卡密批量生成写入验证
- 网上订票抢票攻略 360极速抢票浏览器使用教程_世界快讯
- 【时快讯】【Seata解析】TC处理全局事务和分支事务原理详解
- 每日精选:如何读懂路由表本机地址?routeprint命令可以查看路由表
- 天天动态:序列号(Serial):SourceInsight的实用技巧
- 高频开关电源原理是什么?开瑞高频开关电源原理及增长趋势分析-世界今头条
- 【世界快播报】餐厅吊灯高度怎么调?餐厅吊灯的正确安装高度
- Insert Into select与Select Into哪个更快?数据库中SELECTINTO和SELECTO的区别 环球新动态
- Chrome缓存文件路径在哪?Chrome浏览器缓存文件路径查看方法
- 三星tabs怎么样?三星GALAXYTabT805C(4G版)平板电脑评测
- 焦点快播:HttpClientPost怎么使用?HttpClientPost请求使用步骤详解
- 全球微动态丨如何看K线图?史上最全K线经典组合形态解析
- 全球聚焦:python多线程实现访问页面升级?python使用多线程不断刷新网页的方法
- 天天速递!IE8以上的localstorage存储内容有哪些?sessionstorage存储内容介绍
- 如何利用大数据实现精准营销?会员管理中用户数据的流转及应用解释 世界速讯
- 全球观点:国产FPS《边境》玩法公开!多地图无重力太空战斗
- AllocateHWnd函数是如何传入消息的?AllocateHWnd函数的类型:视焦点讯
- 全球热门:《口袋妖怪》精灵宝可梦let'sgo皮卡丘伊布存档修改器教程
- 1加6t是什么牌子的手机?一加手机品牌介绍_全球简讯
- 全球热文:hadoop3.2镜像挂载文件(附下载)
- 观天下!vim的智能补全方式——CTRL-N和CTRL
- 卫生间排气扇价格是多少?卫生间排气扇价格及安装
- 焦点信息:excel如何制作简版出库表?excel制作简版出库表
- JVM在字节码上怎么运用?JVM在字节码上的使用方法
- QLV格式如何转换成MP4?QLV格式转换成MP4的方法_天天最资讯
- 如何用PS制作属于自己的个性签名档?用PS制作属于自己的个性签名档教程
- 苹果8怎么查看手机常去位置?详细操作步骤:今日快讯
- 索尼a330评测详解 新款套机镜头详解
- 世界要闻:电脑启动怎么选择启动模式?解决方法在这里
- 支付宝商家收款码怎么开通?开通方法来了
- 鸿蒙os2.0系统支持机型有哪些?适配机型介绍
- 克苏鲁FPS《原谅我父亲2》Steam页面上线 暂不支持中文
- 焦点滚动:梦三国服务器每天维护几次?玩家数量逐渐减少的原因是什么?
- 全球观速讯丨育碧免费FPS《不羁联盟》4月14日开启封闭测试
- 联想平板电脑价格多少钱?联想平板电脑价格及型号:今热点
- 4月6日伦敦金属交易所(LME)铅库存26375吨 每日快看
- 【人脸表情识别】pytorch处理CK+数据集:每日简讯
- FPS+策略游戏《Silica》公布 Steam页面已上线-全球新要闻
- 环球动态:如何实现双显示器拼接?实现双显示器拼接方法
- oppo手机上面HD如何取消?oppo手机上面HD取消方法 天天资讯
- 角位移传感器怎么安装?角位移传感器安装方法详解:全球热议
- 天天快看:歪歪如何申请短位ID?歪歪语音使用文字聊天的方法
- QQ怎样绑定密保手机?QQ绑定密保手机的方法
- 跨境电商营销推广的方法有哪些?跨境电商8大推广引流方式
- 如何利用大数据实现精准营销?会员管理中用户数据的流转及应用解释 世界速讯
- 全球热门:《口袋妖怪》精灵宝可梦let'sgo皮卡丘伊布存档修改器教程
- 世界简讯:javascript查找并且倒排序的方法 mongodb常用操作命令大全
- 今日热门!如何解决IE主页被劫持的问题?解决方法介绍
- 【人脸表情识别】pytorch处理CK+数据集:每日简讯
- 加油站都需要什么手续?如何办理工商登记?_当前快看
- 焦点滚动:梦三国服务器每天维护几次?玩家数量逐渐减少的原因是什么?
- 鸿蒙os2.0系统支持机型有哪些?适配机型介绍
- 什么是MultiGroups?JGroups详解
- 世界要闻:电脑启动怎么选择启动模式?解决方法在这里
- 观天下!vim的智能补全方式——CTRL-N和CTRL
- 什么是WAP?WML与HTML有什么区别?
- Ajax:异步的JavaScript和XML的同源策略
- 信息:【干货】Python与STAT时间日期转换问题
- 电脑安装xp和windows7双系统有什么区别?Xp和Win7双系统怎么安装?_全球通讯
- IBM发布全新z16和LinuxONE 4的单机柜版本_观察
- 天天速看:iPhone 8以上都能用!中国广电5G已全面支持iPhone
- RTX3060Ti游戏神卡2169元封神!
- 小米13 Ultra外观曝光:爆料全中!
- 森歌集成灶怎么样?三方面出发谈谈它的那些事儿 独家
- 高华科技上交所公开招股
- 小岛秀夫转发自己的《芭比》海报:谁不喜欢粉粉嫩嫩呢:天天简讯
- 《RE4RE》佣兵模式已上线 未来或加入艾达王\威斯克
- 全球观热点:XGP 5月首发游戏阵容 《红霞岛》领衔
- 谷歌Stadia服务关闭 项目负责人现已离开公司
- 【世界播资讯】《刺客信条:幻景》菜单栏截图 有令人兴奋的新功能
- 3D-Roguelite横版动作游戏《霓虹序列》Steam页面上线 4月21日发售
- 今日热讯:《守望先锋2》第四赛季预告 新英雄新皮肤新活动等
- 首届香港高等教育展4月15日举行 今日观点
- 全球看点:美国男子承认掰断偷走兵马俑手指 检方或只进行轻判
- 索尼:CMA对微软收购暴雪一案态度转变令人惊讶 太不合理!
- 天天观焦点:汾河二库开放吗(山西汾河二库是开放的吗)
- 雷蛇推出透明RGB滚轮游戏鼠标:搭载5G光学传感器 售价499元
- 环球观焦点:太极股份:拟提前赎回“太极转债”