【JAVA基础面经】JVM、JRE、JDK

文章目录


JVM

Java虚拟机,主要用于运行字节码,实现跨平台

 JVM是Java虚拟机,JVM保证了Java语言的平台无关性。其主要职责包括:

  • 类加载:将 .class 文件加载到内存中;
  • 字节码验证:确保字节码安全,防止恶意代码破坏系统;
  • 解释执行 / 即时编译:将字节码转换为机器码执行;早期是纯解释执行,后来引入 JIT(Just-In-Time)编译,将热点代码编译成本地机器码以提高性能;
  • 内存管理:自动分配对象内存,并通过垃圾回收器(GC)回收不再使用的内存;
  • 线程管理:支持多线程调度。

JVM组成部分

 JVM总体上由类加载子系统(ClassLoader)、运行时数据区、执行引擎、本地方法接口(JNI)这四个部分组成。

  • 类加载子系统(ClassLoader):将字节码(.class文件)加载到内存并生成class对象
  • 运行时数据区 :是JVM的内存部分,由方法区、JAVA堆、虚拟机栈、本地方法栈、程序计数器组成;
    • 方法区(Method Area):存放类信息、常量、静态变量等(在 JDK 8 后改为元空间 Metaspace) ;
    • JAVA堆(Java Heap):存放对象实例,所有线程共享,是 GC 主要管理区域;
    • 虚拟机栈(VM Stack):每个线程私有,存放局部变量、操作数栈、方法出口等;
    • 本地方法栈(Native Method Stack):为JVM使用到的 native 方法服务,例如,当Java程序调用本地C或C++代码时,就会使用本地方法栈;
    • 程序计数器(PC Register):记录当前线程执行的字节码行号。
  • 执行引擎
    • 解释器:将字节码指令翻译为对应平台的本地机器指令,以指令为单位读取Java字节码,类似于一个CPU一条一条地执行机器指令;
    • JIT编译器:将源代码直接编译成与本地平台有关的机器码,并且进行各种层次的优化;
    • 垃圾回收器:主要用于Java堆的管理,系统运行期间会产生的大量对象实例,GC回收无用的对象
  • 本地方法接口(JNI):与底层操作系统交互。

JAVA编译执行过程

 javac 编译器将 .java 源文件编译为字节码文件(.class 文件),字节码文件并不直接运行在操作系统上,而是运行在 Java 虚拟机 JVM 中;

 JVM 的类加载器将 .class 文件加载到内存中;字节码由 JVM 的执行引擎负责运行;最后JVM 在程序运行过程中自动管理堆内存。当对象不再被引用时,垃圾回收器(GC)会回收其所占用的内存,避免内存泄漏;

 当把编译好的.class文件放到Windows系统上时,Windows版的JVM会运行它;放到macOS系统上时,macOS版的JVM会运行它

JRE

Java运行时环境,包含JVM、Java 标准库和其他支持文件,用于运行 Java 程序

 JRE(Java运行时环境)是一个软件,如果只需要运行别人编译好的 Java 程序(比如一个 jar 包),而不需要自己开发,那么只需要安装 JRE 即可。包含以下三个部分,

  • JVM:负责执行字节码
  • Java 标准库(如 java.lang, java.util, java.io 等)
  • 其他支持文件:如配置文件、属性文件、资源文件等

JDK

Java 程序的完整工具包,包括JRE和开发Java程序所必需的工具和环境,用于开发、编译、调试 Java 程序

 JDK 是用于开发 Java 程序的完整工具包。它不仅包含 JRE(运行环境),还额外提供了开发、调试、编译、文档生成等一系列工具。是整个Java开发的核心。JDK 包含JAVA的运行环境(JVM + Java系统类库)和JAVA工具。

  • JRE:内含 JVM + 核心类库
  • JDK提供了一系列开发Java程序所必需的工具和环境
    • 编译器:如javac命令,用于将Java源文件(.java后缀)编译成字节码文件(.class后缀);
    • 打包工具:将类文件打包成 jar 包;
    • 文档生成器:javadoc命令从源码注释中提取文档,生成API文档;
    • 调试工具:jdb是Java的调试器,用于查找和修复程序中的错误;
    • 反汇编器:javap是反汇编器,查看字节码;
    • 其他工具如 jps、jstat、jconsole 等用于监控和诊断。

JVM、JRE和JDK的联系与区别

  • JDK > JRE > JVM


图片来源

  • JVM是Java虚拟机,主要用于运行字节码,提供了内存管理、垃圾回收、安全性等功能,实现了 java 程序的跨平台性;
  • JRE是Java运行时环境,包含JVM、Java 标准库和其他支持文件,用于运行 Java 程序;
  • JDK是Java 程序的完整工具包,包括JRE和开发Java程序所必需的工具和环境,用于开发、编译、调试 Java 程序。
相关推荐
唐青枫9 小时前
Java Optional 实战指南:优雅处理空值与链式转换
java
一起学开源9 小时前
一文读懂 ReAct 范式:让 AI Agent 真正学会“思考+行动“
java·javascript·react.js·ecmascript·react·alibaba·智能体开发
云泽80810 小时前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法
逍遥德10 小时前
MQTT教程详解-04.SpringBoot集成MQTT(告别手动控制)
java·spring boot·物联网·中间件·iot·iotdb
语戚11 小时前
力扣 3161. 块放置查询:线段树解法(Java 实现)
java·算法·leetcode·面试·线段树·力扣·
我命由我1234511 小时前
Android 开发问题:MlKitException: An internal error occurred during initialization.
android·java·java-ee·android jetpack·android-studio·androidx·android runtime
星恒随风12 小时前
Python 基础语法详解(一):从表达式、变量到数据类型
开发语言·笔记·python·学习
888CC++12 小时前
java 并发编程
java·开发语言·python
罗超驿12 小时前
18.Web API 实战:元素与表单属性的获取和修改
开发语言·前端·javascript
无风听海12 小时前
JSON Web Token(JWT)完全指南
java·前端·json