jdk中集成的jre和单独安装的jre有什么区别?
jdk 和 jre 是什么? 有什么区别?
jre
Jre 是java runtime environment, 是java程序的运行环境。既然是运行,当然要包含jvm,也就是大家熟悉的虚拟机啦,还有所有java类库的class文件,都在lib目录下打包成了jar。大家可以自己验证。至于在windows上的虚拟机是哪个文件呢?学过MFC的都知道什么是dll文件吧,那么大家看看jre/bin/client里面是不是有一个jvm.dll呢?那就是虚拟机。jdk
Jdk 是java development kit,是java的开发工具包, 主要是给ide 用的,里面包含了各种类库和工具。当然也包括了另外一个Jre., 而且jdk/jre/bin 里面也有一个server文件夹, server文件夹下面也有一个jvm.dll 虚拟机。
为什么默认安装的情况下, 有两个jre呢
我们做了以下几个小实验:
1. 对比文件夹内容
使用 winMerge 软件对两个jre 文件夹进行对比(\(JAVA_HOME\)\jdk1.8\jre 和 \(JAVA_HOME\)\jre1.8), 结果如下:

可以看到,两个文件夹中的文件结构和命名绝大部分是相同的,可以推断这两个jre 文件夹是可以相互替换的。故在功能上,其实是可以相互替换的。
2. 在命令行环境下(模拟用户使用)
使用javac 命令 编译一个 Test.class 输出 hello world 的。(为什么不用考虑javac? 因为javac 不是jre 中的, 不在讨论范围内):
将\(JAVA_HOME\)\jdk1.8\jre 这个文件夹剪切到其它的地方,命令行输入java Test, 输出正常:

将\(JAVA_HOME\)\jre1.8 这个文件夹剪切到其它的地方,命令行输入java Test, 输出错误:

说明命令行这种用户使用场景下,JVM是\(JAVA_HOME\)\jre1.8 里面的虚拟机环境。
那有人可能要问了, 自己明明没有将\(JAVA_HOME\)\jre1.8 加到环境变量里面去, 为什么会使用这里面的JVM?
我们看到
原因是:在安装jre 的时候,安装程序自动在\(System32\)\java (我的电脑里面是C:\Program Files (x86)\Common Files\Oracle\Java\javapath) 路径加到Path 的最上面, 在\(JAVA_HOME\)\jdk1.8\bin\前面, 而且在以上目录下有java.exe 文件,这个文件应该是一个wrapper, 而目的是为了让使用者免于输入太长的指命。Java.exe的工作就是找到合适的JRE来运行Java程序。 Java.exe依照底下的顺序来查找JRE:自己的目录下有没有JRE;父目录有没有JRE;查询注册表: [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment] , 查询注册表之后,发现以上键值 是和\(JAVA_HOME\)\jre1.8\一致的。
说明在用户级别使用java虚拟机去运行jar 等程序时, 默认使用过的是单独安装的jre, 即\(JAVA_HOME\)\jre1.8
3. Intellij 使用环境下 (模拟一般IDE 开发使用)
将\(JAVA_HOME\)\jdk1.8\jre (即jdk集成的jre) 文件夹剪切到其它地方之后,用Intellij 打开之前一切正常的工程,发现

报错 Cannot resolve symbol 'Stack'
将\(JAVA_HOME\)\jre1.8 移除, 保留\(JAVA_HOME\)jdk1.8\jre 则 IDE 一切正常。、
这说明 想Intellij 这样的开发环境下,对代码的纠错,预运行等需要使用 \(JAVA_HOME\)\jdk1.8\jre 这样jdk 中集成的jre
综述
根据以上的小实验结果,我们有理由相信:
- \(JAVA_HOME\)\jre1.8 这样单独安装的jre 是给普通用户,和其它大多数的一般应用程序使用的java运行环境。
- \(JAVA_HOME\)\jdk1.8\jre 这样集成在jdk 中的jre 是给IDE 开发环境使用的。
jdk中集成的jre和单独安装的jre有什么区别?的更多相关文章
- JDK安装路径下的JRE与独立安装的JRE区别
在JDK安装目录下的子文件下,已经默认安装了一个jre.且与独立安装的JRE6所包含的文件几乎完全一样. JDK里面内置的JRE和独立的JRE是有一点差别的: 在JDK安装文件中包含了一个完整的独立版 ...
- mac使用xampp中自带phpmyadmin连接单独安装mysql
1 在xampp安装目录中找到phpadmin目录,编辑config.inc.php权限,赋予读写权限 2 打开config.inc.php $cfg['Servers'][$i]['user'] = ...
- 在Abp中集成Swagger UI功能
在Abp中集成Swagger UI功能 1.安装Swashbuckle.Core包 通过NuGet将Swashbuckle.Core包安装到WebApi项目(或Web项目)中. 2.为WebApi方法 ...
- Windows系统下在Eclipse中集成Python
我现在偶尔开发代码,已经不用Eclipse了,主要原因是查看Jar包中的代码反编译十分不便,项目加载的时候卡,偶尔还会崩溃 用Intellij IDEA和PyCharm 原来的笔记如何在Eclipse ...
- JAVA(JDK,JRE)更改目录安装及环境变量配置
重温一下 JAVA(JDK,JRE)更改目录安装及环境变量配置 https://jingyan.baidu.com/article/e2284b2b5b7ae5e2e7118d11.html 备注:随 ...
- Jenkins中集成jmeter-maven插件
转自:http://my.oschina.net/u/1377774/blog/168969 目录[-] 第一步.先在maven工程中单独使用jmeter-maven插件 0.环境 1.在POM.xm ...
- 如何在 ASP.NET MVC 中集成 AngularJS(2)
在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...
- 如何在 ASP.NET MVC 中集成 AngularJS(1)
介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...
- Eclipse中集成Tomcat
问题: 很多时候在Eclipse中启动Tmocat后,不能访问本机的localhost:8080主页,并且其他项目也不能访问. 原因: 打开Tomcat下的webapp后也找补到项目目录,这是因为Ec ...
随机推荐
- jQuery常用AJAX-API
目的:简化客户端与服务端进行局部刷新的异步通讯 (1)取得服务端当前时间 简单形式:jQuery对象.load(url) 返回结果自动添加到jQuery对象代表的标签中间 如果是Servlet的话,采 ...
- ResourceUtils 创建资源目录工具类
package com.jcf.utilsdemo; import android.content.Context; import android.content.res.Resources; pub ...
- Spring Boot_打造企业级微信点餐系统_汇总贴
2019更新版 Spring Boot双版本(1.5/2.1) 打造企业级微信点餐系统 H:\BaiDu\微服务0830\2019微服务时代Spring Boot双版本(1.5-2.1) 打造企业级 ...
- Linux高级命令 ==> find、grep、sed、awk
一.find find命令用来在指定目录下查找文件.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件.并且将查找到的子目录和文件全部进行显示. 语法 find path ...
- Pycharm 编辑器快捷键
必备技能:IDEA一定要懂的32条快捷键 这些IntelliJ IDEA键盘快捷键可以让你专注于编写代码,让你的双手在键盘上起舞. 1,搜索文件名: ↑ Shift 快速连续按两下 2,显示便捷提 ...
- Unreal Engine* 4.19 的 CPU 功能检测
随着现代 CPU 内核数量的增加,可以拥有更多的游戏功能.但是,相比配备高端系统的玩家,内核数量较少的玩家可能会处于劣势.为了缩小这种差距,可以使用 C++ 和蓝图划分特性.这样可以实现最大的 CPU ...
- 架构模式: API网关
模式: API网关 上下文 让我们假设您正在构建一个使用Microservice体系结构模式的在线商店,并且您正在实现产品详细信息页面.您需要开发产品详细信息用户界面的多个版本: 用于桌面和移动浏览器 ...
- 2019年最新Web安全攻防班课程
咨询请加QQ:1373721311 或 2644148223 课程核心大纲总览 Web安全攻防班以业界权威的OWASP TOP 10的漏洞为主干课程.更加详细教学思维导图可访问如下链接:https:/ ...
- Rectangle
题目描述 在 x 轴上有相互挨着的矩形, 这些矩形有一个边紧贴着 x 轴,现在给出每个矩形的长宽, 所有的矩形看作整体当作一个画布, 则可以在这个画布上画出的最大的矩形的面积是多少.(画出的矩形长和高 ...
- 手写Indexof
String.prototype.indexO = function(st){ // console.log(this.length); let str = this; var j = 0; let ...