JVM、JRE、JDK区别和联系

JVM(java virtual machine):Java虚拟机主要包括类加载器、执行引擎、本地接口和运行时数据区,其中运行时数据区是JVM的主要部分。JVM的主要作用是将class文件中的二进制数据加载到运行时数据区的方法区,在堆区生成相应的java.lang.Class对象,并结合本地接口,通过执行引擎执行java程序。 编写的java源程序(.java格式的文件)需要被编译为类文件(.class格式的文件),才能被java虚拟机识别(JVM只能识别class文件),JVM识别class文件中的字节码指令并调用操作系统向上的API完成动作。JVM是与平台(平台就是指计算机的操作系统,如:Windows、Linux、Mac等操作系统)有关的,不同的平台具有不同的JVM,所以,JVM不具有跨平台性。同一段代码在编译后生成的字节码是一样的,同一段字节码在不同的JVM实现上会映射到不同系统的API调用,从而实现代码的不加修改即可跨平台运行。因此,Java代码能够跨平台运行的核心在于JVM。class文件并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。但是,只有JVM还不能完成class文件的执行,因为在解释class的时候,JVM需要调用解释所需要的类库lib,而jre包含lib类库。

JRE(Java Runtime Environment):Java运行时环境,是运行基于Java语言编写的程序所不可缺少的运行环境。JRE主要包含jvm的标准实现和Java的一些基本类库两个部分,它相对于jvm来说,多出来的是一些Java基本类库。在jre的安装目录下面有两个文件夹bin和lib,可以简单认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和lib加在一起就称为jre。如果只是运行java程序,而不开发java程序(即不写java代码),可以在操作系统上只安装JRE,而不用安装JDK。比如在服务器上只是部署并运行java程序,而不开发java程序,只需要在服务器上安装JRE,将开发好的java程序部署到服务器上,启动运行即可。

JDK(Java Development Kit):java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。如果需要运行java程序,只需安装JRE即可。如果需要编写java程序,就需要安装JDK。由于JDK中包含了JRE,如果计算机中安装了JDK,不仅可以开发java程序,还可以运行java程序。JRE可以单独安装,一般不建议单独安装JRE,只需安装JDK即可。

Java 的编译器、解释器

JVM负责运行字节码:JVM把每一条要执行的字节码交给解释器,翻译成对应的机器码,然后由解释器执行。JVM解释执行字节码文件就是JVM操作Java解释器进行解释执行字节码文件的过程。

Java编译器:将Java源文件(.java文件)编译成字节码文件(.class文件,是特殊的二进制文件,二进制字节码文件),这种字节码就是JVM的"机器语言"。javac.exe可以简单看成是Java编译器。

Java解释器:是JVM的一部分。Java解释器用来解释执行Java编译器编译后的程序。java.exe可以简单看成是Java解释器。

相关推荐
I_Am_Me_2 分钟前
【JavaEE进阶】 JavaScript
开发语言·javascript·ecmascript
重生之我是数学王子12 分钟前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt
xmh-sxh-131413 分钟前
jdk各个版本介绍
java
Ai 编码助手14 分钟前
使用php和Xunsearch提升音乐网站的歌曲搜索效果
开发语言·php
学习前端的小z18 分钟前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
神仙别闹25 分钟前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
XINGTECODE26 分钟前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
天天扭码32 分钟前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
程序猿进阶32 分钟前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺37 分钟前
Spring Boot框架Starter组件整理
java·spring boot·后端