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

相关推荐
来杯@Java16 分钟前
图书管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·mybatis·课程设计
卷毛的技术笔记1 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
编程大师哥1 小时前
匿名函数 lambda + 高阶函数
java·python·算法
isyangli_blog1 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008111 小时前
FastAPI APIRouter
开发语言·python
Benszen1 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆1 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木1 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
adrninistrat0r1 小时前
Java调用链MCP分析工具
java·python·ai编程
杨充2 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法