【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 程序。
相关推荐
liulilittle2 小时前
SQLite3增删改查(C
c语言·开发语言·数据库·c++·sqlite
左左右右左右摇晃2 小时前
ConcurrentHashMap 设计原理笔记
java·开发语言·笔记
keyborad pianist2 小时前
包装类、泛型、集合
java
华科易迅2 小时前
Spring装配对象方法-构造方法
java·后端·spring
是小蟹呀^2 小时前
Java 内部类详解:成员内部类、静态内部类、局部内部类与匿名内部类
java·内部类
于先生吖2 小时前
国际语言适配拼车系统 JAVA 后端源码 + 同城顺风车功能全解析
java·开发语言
ID_180079054732 小时前
超详细:Python 调用淘宝商品详情 API 完整教程
开发语言·python
czlczl200209252 小时前
KRaft原理
java·zookeeper
小恶魔巴巴塔2 小时前
C语言避免头文件循环
c语言·开发语言