1. JVM学习笔记


1.1. 简介

Java虚拟机(Java Virtual Machine, JVM) 是 Java 平台的核心组件,负责执行 Java 字节码(.class 文件),使 Java 程序具备“一次编写,到处运行”(Write Once, Run Anywhere, WORA)的能力。

1.1.1. JVM 的作用

  • 跨平台运行:JVM 屏蔽了底层操作系统和硬件的差异,Java 程序只需编译成字节码,即可在任何支持 JVM 的系统(Windows、Linux、macOS 等)上运行。

  • 内存管理:自动管理内存分配和垃圾回收(GC),减少内存泄漏风险。

  • 安全机制:提供沙箱(Sandbox)环境,限制恶意代码对系统的访问。

  • 性能优化:通过即时编译(JIT, Just-In-Time)将热点代码转换为本地机器码,提升执行效率。

1.1.2. JVM 核心架构

  1. 类加载子系统(Class Loader)

    • 负责加载 .class 文件到内存,并生成对应的 Class 对象。

    • 包括 启动类加载器(Bootstrap)、扩展类加载器(Extension)、应用类加载器(Application)

  2. 运行时数据区(Runtime Data Areas)

    • 方法区(Method Area):存储类结构、常量池等元数据(JDK 8 后由元空间 Metaspace 替代)。

    • 堆(Heap):存放对象实例(垃圾回收的主要区域)。

    • 虚拟机栈(JVM Stack):存储方法调用的栈帧(局部变量、操作数栈等)。

    • 本地方法栈(Native Method Stack):支持本地(Native)方法执行。

    • 程序计数器(PC Register):记录当前线程执行的指令地址。

  3. 执行引擎(Execution Engine)

    • 解释器:逐行解释执行字节码。

    • JIT 编译器:将热点代码编译为本地机器码优化性能。

    • 垃圾回收器(GC):自动回收堆中不再使用的对象(如 Serial、Parallel、CMS、G1、ZGC 等算法)。

  4. 本地方法接口(JNI, Java Native Interface)

    • 允许 Java 代码调用 C/C++ 等本地库。

1.1.3. JVM 与 JDK/JRE 的关系

  • JDK(Java Development Kit):开发工具包(含 JRE + 编译器 javac 等)。

  • JRE(Java Runtime Environment):运行环境(含 JVM + 核心类库)。

  • JVM:实际执行字节码的虚拟机(属于 JRE 的一部分)。

1.1.4. 常见 JVM 实现

  • HotSpot(Oracle 官方默认 JVM,高性能)

  • OpenJ9(IBM 贡献,低内存占用)

  • GraalVM(支持多语言,高性能)

1.1.5. 为什么需要 JVM ?

  • 跨平台:无需针对不同系统重新编译代码。

  • 安全:字节码由 JVM 验证,避免直接操作内存。

  • 性能:JIT 和 GC 优化使 Java 兼顾开发效率和执行速度。

总结:JVM 是 Java 生态的基石,通过虚拟化技术实现了跨平台、内存管理和高性能运行,使得 Java 成为企业级应用的主流选择。


1.2. Java 代码到底如何运行起来的?

  1. 首先编写 java 代码(.java文件)
  2. 经过打包变成 jar/war 包(.class文件)
  3. 通过类加载器加载到 JVM 中(按照代码编写的情况加载,初始化等)
  4. JVM 按照调用等执行写好的类中的代码

java_run


1.3. 目录

JVM 汇总总结

JVM 类加载机制

JVM 内存区域

JVM 垃圾回收 简介

JVM 分代模型及对象分配流转

JVM 垃圾回收算法

JVM 回收器简介及Stop the World问题

JVM ParNew + CMS垃圾回收器

JVM 内存溢出 OOM

JVM 各种 GC 名词简介总结

JVM 垃圾回收器对比选择(截至 JDK 17)

JVM G1垃圾回收器

JVM G1 Region 分区详解

JVM G1 新生代分区大小及自动扩展

JVM G1 停顿预测模型

JVM G1 对象分配原理

JVM G1 TLAB 机制原理

JVM G1 对象分配流程

JVM G1 设计的核心机制

results matching ""

    No results matching ""