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解释器。

相关推荐
PAC_3Dame4 分钟前
记一次真实的线上OOM
java
xinhuanjieyi11 分钟前
极语言让ai学习的方法
开发语言·学习
SunnyDays101122 分钟前
如何在Java中将Word文档转换为图像(JPEG、PNG或SVG)
java
xiaogutou112126 分钟前
2026年历史课件PPT模板选购指南:教师备课效率与精度的平衡方案
开发语言·c#
Lumos_77740 分钟前
Linux -- 线程
java·jvm·算法
知兀1 小时前
【MybatisPlus】后端用枚举类,数据库用tinyint,存在枚举类型转换
java
StockTV1 小时前
印度股票实时数据 NSE和BSE的实时行情、K 线及指数数据
java·开发语言·spring boot·python
chaofan9801 小时前
GPT-5.5 领衔 Image 2.0:像素级控制时代,AI 绘图告别开盲盒
开发语言·人工智能·python·gpt·自动化·api
User_芊芊君子1 小时前
【OpenAI 把 AI 玩明白了】:自主推理 + 动态知识图谱,这 4 个技术突破要颠覆行业
java·人工智能·知识图谱
爱码小白1 小时前
Python 异常处理 完整学习笔记
开发语言·python