1. 定义
JRE(Java Runtime Enviroment)是Java运行时环境。面向Java程序的使用者,而不是开发者。JRE是运行Java程序所必须环境集合,包含JVM标准实现及Java核心库。它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。

JDK(Java Development Kit)是Java开发工具包,它提供了Java的开发环境(编译器javac等工具,用于将java文件编译成class文件)和运行环境(包括JVM和Runtime辅助包,用于解析class文件使其运行)。如果安装了JDK,那么不仅拥有了Java开发环境,也拥有了运行Java程序的平台。实际上JDK=开发工具tools+JRE+标准类库。

总结一下,jdk包含jre,jdk是jre的父级上级。jre只是jdk的一个子集存在。

2. 为什么安装JDK的时候会出现两套JRE
我们在安装JDK的时候会出现两个jre目录,一个是jdk的子目录(jdk内部目录),一个是jdk的同级目录(jdk外部目录),那么它们之间有什么区别呢?

先说一下Java的虚拟机是怎么回事
众所周知java.exe是java class文件的执行程序,但实际上java.exe程序只是一个执行的外壳。它会装载jvm.dll(windows下),这个动态连接库才是java虚拟机的实际操作处理所在。java.exe程序只负责查找和装载jvm.dll动态库,并调用它进行class文件执行处理。
“java”命令与“javac”命令其实都是launcher,负责启动JVM并把启动参数传给JVM而已。

专用JRE
JDK里面有很多用java所编写的开发工具,比如javac.exe、jar.exe等。同理javac.exe、jar.exe等也只是一个包装器,真正的功能代码是放在jar包和链接库文件里面的。那么这样的话这些用java写的文件就要用到Java的运行环境去跑,也就是JDK目内部目录的jre,这里面的jre是专门运行jdk工具的,称为专有JRE。专有JRE没有注册表设置,通常也不会运行外部的class文件。

公共JRE
公共JRE可由其他Java应用程序使用,它会注册到windows的注册表里面去,公共JRE就是为运行加载到计算机中的Java程序提供运行环境的

java自动更新指什么
平时所说的"java自动更新"是指公共JRE运行时环境的更新,不是JDK版本的更新。这个更新是为了能够让计算机使用最新版本正常运行一些网站或者Web应用等当中的Java程序。如果要升级JDK版本,只能够从官网中下载重新安装。

3. 如果一台电脑安装两套以上的JRE,那么谁决定用哪一套呢?
java.exe决定,java.exe的工作就是找到合适的JRE来运行java程序。java.exe按照以下按顺序来查找JRE:
自己的目录下有没有JRE->父目录有没有JRE->查询注册表

4. 我们从编辑java代码到运行调试的过程是怎样的?
windows系统调用运行javac.exe程序,然后启动JVM,将参数传递给JVM,由JVM做这个编译操作
windows系统调用运行java.exe程序,java.exe装载jvm.dll,这一步实际上就是把jvm虚拟机运行起来了,然后JVM根据java命令传递过去的工作进行对应的工作
5. jar包的作用
jar包我们可以理解为类似于zip压缩包的东西,只不过jar包里面多了有一种可执行jar包的东西。jar包具有最基本的功能,可以将多个文件、文件夹打包在一个文件里面,也可以在里面放可执行字节码(比如类文件),我们可以用jar.exe启动JVM然后在里面执行jar包里面的代码。

6.IDE通常是怎么处理的
以ij为例,它的安装目录里面会自带一个jre,但是没有jdk
所以也就是说,ide在编译.java文件的时候调用的是我们另外安装的JDK,但是运行的时候用的却是自己的jre,当然我们也可以修改ide的配置改成自己原本安装的jre

参考链接:JRE与JDK的区别

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐