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 老年代垃圾回收算法

JVM 最新的 G1 垃圾回收器

results matching ""

    No results matching ""