JDK和JRE的区别

  • JRE
    jre是java runtime environment, 是java程序的运行环境;
    运行Java程序需要包含jvm(虚拟机)、java类库的class文件(打包成jar);
    jre/bin/client中包含jvm.dll文件,即windows上的虚拟机文件。
  • JDK
    jdk是java development kit,是java的开发工具包, 主要用于IDE;
    其中包含了各种类库和工具,也包含了另外一个JRE;
    jdk/jre/bin 文件夹中有一个server文件夹,其中也包含jvm.dll 虚拟机文件。

默认安装的情况下, 会有两个jre

  • %JAVA_HOME%\jdk1.8\jre\
  • %JAVA_HOME%\jre\

两个文件夹中的文件结构和命名绝大部分是相同的;
可以推断这两个jre 文件夹是可以相互替换的;
故在功能上,其实是可以相互替换的。

用javac命令编译Test.java -> Test.class (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。

Intellij IDEA使用环境下(模拟一般IDE 开发使用)

将%JAVA_HOME%\jdk1.8\jre(即jdk集成的jre) 文件夹剪切到其它地方;
用IDEA 打开之前一切正常的工程;
在这里插入图片描述
报错 Cannot resolve symbol ‘Stack’

将%JAVA_HOME%\jre1.8\ 移除, 保留%JAVA_HOME%\jdk1.8\jre\ 则IDE一切正常。

这说明 想IDEA这样的开发环境下,对代码的纠错,预运行等
需要用%JAVA_HOME%\jdk1.8\jre\ 这样jdk 中集成的jre。

综述

根据以上的小实验结果,我们有理由相信:%JAVA_HOME%\jre1.8\ 这样单独安装的jre 是给普通用户,和其它大多数的一般应用程序使用的java运行环境。
%JAVA_HOME%\jdk1.8\jre\ 这样集成在jdk 中的jre是给IDE开发环境使用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值