Java JVM 零基础入门

一、到底什么是 JVM?一句话讲透

JVM 全称 Java 虚拟机 ,简单理解:一台专门用来运行 Java 程序的虚拟电脑。

我们写的 Java 代码,电脑本身是看不懂的,真正执行代码的不是操作系统,而是 JVM。

同时它也是 Java 跨平台的核心:

  • Windows 有 Windows 版 JVM

  • Linux 有 Linux 版 JVM

  • Mac 有 Mac 版 JVM

代码只需要写一次,编译成统一的 .class 字节码文件,就能在任意装有 JVM 的系统上运行。

一次编写,到处运行,靠的就是 JVM。


二、JVM 整体架构:三大核心模块(全局框架)

整个 JVM 内部结构非常规整,宏观上就分为 三大模块。

Java 程序从启动、加载、运行、内存分配、垃圾回收,全部都在这三大模块中完成。

完整运行链路记住一句话:类加载子系统 → 运行时数据区(内存) → 执行引擎

下面逐个通俗讲解,只讲作用,不讲细节。


2.1 类加载子系统:程序的"搬运工"

我们写的 Java 代码,编译后会生成 .class 字节码文件,存放在硬盘上。

硬盘上的文件无法直接运行,必须加载到内存。

类加载子系统的唯一作用:把硬盘的 class 文件,安全搬运、加载到 JVM 内存中。

它会简单做三件事:

  1. 加载:读取 class 文件进内存

  2. 校验:检查文件格式是否合法、安全

  3. 初始化:给类的静态变量、默认数据完成初始化

你不用记双亲委派、不用记加载细节,入门只需要知道:所有代码想运行,必须先经过类加载器加载。


2.2 运行时数据区:JVM 的"内存仓库"

这是 JVM 最核心的区域,也是大家口中常说的 JVM 内存模型。

可以通俗理解为:JVM 专门划分出来的几块独立内存空间,用来存放代码、对象、变量、线程信息。

总共分为 5 个区域,我只讲各自用途,不深挖底层:

1. 程序计数器

记录当前线程代码执行到第几行,线程私有,空间极小,不会内存溢出。

2. 虚拟机栈

每个线程独占一份,存放方法执行信息、局部变量。方法调用、入栈出栈都在这里。

栈深度过大会报栈溢出错误 StackOverflowError。

3. 本地方法栈

专门给 Java 调用系统底层 native 本地方法使用,日常开发几乎感知不到。

4. 堆内存(最重要)

整个 JVM 最核心的区域。

所有 new 出来的对象、数组 全部存在堆里,全局线程共享。

我们常说的 GC 垃圾回收,主要回收的就是堆内存。

5. 方法区(JDK8+ 元空间)

存放类结构信息、静态变量、常量、方法元数据等全局固定信息。

JDK8 之后彻底废弃永久代,使用 元空间 Metaspace。


2.3 执行引擎:真正干活的"执行者"

代码加载进内存之后,谁来运行?答案就是:执行引擎。

它是 JVM 的"CPU",负责真正执行字节码,主要包含三部分能力:

1. 解释器

逐行解释执行字节码,启动快,适合短时执行代码。

2. JIT 即时编译器

针对频繁执行的热点代码,编译成机器码缓存,大幅提速,是 Java 越跑越快的核心。

3. GC 垃圾回收器

自动清理堆内存中无效、不再使用的对象,释放内存,防止程序内存溢出。


三、全局串联:一段代码的完整运行流程

我帮大家把整个 JVM 流程完整串起来,看完彻底通透:

  1. 我们写的 .java 源代码,编译为 .class 字节码文件

  2. 类加载子系统 将 class 文件加载进 JVM 内存

  3. 数据、对象、方法信息,分别存入 运行时数据区 的各个内存区域

  4. 执行引擎 解释/编译字节码,执行程序逻辑

  5. 程序运行中,GC 自动清理无效对象,回收内存

  6. 程序结束,JVM 释放所有资源

加载 → 存内存 → 执行 → 自动回收,这就是 JVM 的全部工作。


四、新手必背:JVM 核心框架总结(极简版)

不用记复杂知识点,入门只需要记住这 5 句话:

  1. JVM 是 Java 专属虚拟机,是 Java 跨平台的核心

  2. 类加载子系统:负责把代码加载进内存

  3. 运行时数据区:JVM 所有内存的分配区域,对象存在堆里

  4. 执行引擎:负责跑代码、热点提速、垃圾回收

  5. GC 主要作用于堆内存,自动帮我们释放无用内存


相关推荐
for_ever_love__26 分钟前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram
java资料站30 分钟前
五、Spring AI Alibaba · Memory · Saver(短期会话)
java·spring·microsoft
夜之眷属1 小时前
Core dump 崩溃排查:JVM 宕机后,那份 core 文件怎么用 gdb 还原现场
java·运维·服务器·jvm
波加曼大王2 小时前
# vLLM不要迷信PagedAttention神话,聊聊线上藏着的内部碎片陷阱
java·架构
SL_staff2 小时前
目标健康度自检清单:开发者视角下的目标-计划-任务链路断点诊断
java·开源·github
for_ever_love__2 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结
神仙别闹2 小时前
基于C++实现的贪吃蛇游戏平台
java·c++·游戏
布吉岛的石头2 小时前
Java 程序员第 49 阶段11:Java 接 BERT:用 ONNX Runtime 做句向量推理
java·人工智能·python·深度学习·bert·transformer
niucloud-admin2 小时前
JAVA V6 多商户商城 开发文档——JAVA服务端
java·开发语言
alexlifexyz2 小时前
写了个 Claude Code 插件:AI 写的 Java 违反阿里规约,就写不进文件
java