当前位置: 首页 > news >正文

【JAVA八股文第一章-JVM内存模型】

JVM 内存模型详解(从入门到理解执行原理)

一、什么是 JVM 内存模型?

JVM(Java Virtual Machine)内存模型,本质上就是:

Java 程序在运行时,数据在内存中的划分方式以及各部分的作用机制

理解 JVM 内存模型,是学习 Java 高级内容(如 GC、性能调优、并发)的基础。


二、JVM 内存整体结构

JVM 运行时内存分为两大类:

✅ 1. 线程私有(每个线程独有)

  • 程序计数器(PC Register)
  • 虚拟机栈(Stack)
  • 本地方法栈(Native Stack)

✅ 2. 线程共享(所有线程共享)

  • 堆(Heap)
  • 方法区(Method Area)

三、线程私有区域详解

1️⃣ 程序计数器(PC Register)

作用:

记录当前线程执行到哪一条字节码指令

特点:

  • 每个线程独立
  • 用于线程切换恢复执行位置
  • 不会发生内存溢出(OOM)

2️⃣ 虚拟机栈(Stack)

核心作用:

管理方法的调用和执行过程

方法执行流程:
方法调用 → 创建栈帧 → 入栈 方法结束 → 栈帧出栈

⭐ 栈帧结构(重点)

每个方法对应一个栈帧,包含:

✔ 局部变量表(Local Variables)
  • 存储:基本类型的值 / 对象引用
  • 使用 slot(槽位)管理
  • ❗ 不存变量名

✔ 操作数栈(Operand Stack)
  • 用于计算(+、-、*、/)
  • JVM 是“基于栈的计算模型”

示例:

intc=a+b;

底层类似:

load a load b add store c

✔ 动态链接(Dynamic Linking)
  • 将方法调用与方法区中的方法关联

✔ 方法返回地址(Return Address)
  • 方法执行结束后,返回到调用位置

⚠️ 栈相关异常

  • StackOverflowError(递归过深)
  • OutOfMemoryError(栈扩展失败)

3️⃣ 本地方法栈(Native Stack)

作用:

为 native 方法(C/C++)服务

例如:

System.currentTimeMillis();

底层由本地方法实现。


四、线程共享区域详解


4️⃣ 堆(Heap)⭐最重要

核心作用:

存放对象实例

特点:

  • JVM 中最大的一块内存
  • 所有线程共享
  • 垃圾回收(GC)主要发生在这里

✔ 堆的结构(分代模型)

新生代(Young Generation) Eden Survivor(S0 / S1) 老年代(Old Generation)

✔ 对象生命周期

new → Eden 存活 → Survivor 多次存活 → 老年代

⚠️ 常见异常

java.lang.OutOfMemoryError: Java heap space

5️⃣ 方法区(Method Area)

核心作用:

存储类的信息和方法代码


✔ 存储内容:

  • 类结构信息
  • 方法字节码
  • 常量池
  • 静态变量

✔ JDK 8 之后

方法区实现为:

Metaspace(元空间)

特点:

  • 使用本地内存
  • 不在堆中

五、执行流程详解(重点)

来看一段代码:

publicstaticvoidmain(String[]args){inta=10;Personp=newPerson();}

执行过程:

① 类加载
Person.class → 方法区

② main 方法入栈
栈中创建 main 栈帧

③ 执行 int a = 10
局部变量表: slot[0] = 10

④ 执行 new Person()
堆: 创建 Person 对象 栈: p = 对象地址(引用)

⑤ 程序计数器
始终记录当前执行位置

六、核心关系总结(必须掌握)

栈(局部变量) → 指向 → 堆(对象) 方法区 → 定义类和方法

七、面试高频问题总结

✔ 对象存在哪?

👉 堆


✔ 引用存在哪?

👉 栈(局部变量表)


✔ 方法在哪?

👉 方法区


✔ 方法如何执行?

👉 通过栈(栈帧)


✔ 为什么会 OOM?

👉 堆 或 方法区内存不足


八、终极总结

方法区:定义(类、方法) 堆:数据(对象) 栈:执行(方法运行过程)

九、结语

JVM 内存模型是理解 Java 底层机制的关键基础:

  • 想学 GC → 必须懂堆
  • 想学并发 → 必须懂内存结构
  • 想调优 → 必须懂整个运行模型

http://www.gsyq.cn/news/1612096.html

相关文章:

  • 01 · 当 AI 学会“按规矩办事“——规范驱动 Agent 工作流总览
  • HDFS的文件的读写流程及常用命令
  • CosyVoice 双向流式 streamingCall() — 前后端总体方案
  • 基于改进YOLOv8与无人机的电动自行车违规行为智能检测系统
  • 从零到一:如何用Citizens2打造沉浸式Minecraft服务器体验
  • GitLab架构演进:应对AI时代代码分析与高并发挑战
  • 按位取反是对补码的取反,和之前的求反码的规则类似,但是首位的符号位是改变的,剩下的位数0和1互换,说白了就是每一位都取反
  • 基于改进YOLOv8的无人机航拍电动自行车违规行为检测实践指南
  • 叉车采购选哪家?这几点帮你精准锁定
  • AI Agent实战指南:从核心能力到本地部署的完整路径
  • 影刀RPA新手教程:电商评论挖掘完全指南——批量采集用户评论、情感分析与词云生成
  • vivo X Fold6开售:稳健策略下,能否跨越折叠屏与AI生态门槛?
  • WorkBuddy AI助手:自然语言查询数据库实战指南与安全实践
  • DTSS认证咨询机构哪家值得推荐
  • Linux strip 命令 | 详解及在 Linaro 交叉编译工具链中的使用
  • 第49期 | 求职策略与渠道——AI时代的前端求职指南
  • MySQL零基础入门:从核心概念到实战应用的全链路学习指南
  • 终极图片去重解决方案:AntiDupl.NET免费开源工具完全指南
  • RAG 看起来简单,一上线就翻车?逐个排查 5 个环节
  • LyricsX:macOS歌词同步终极指南 - 打造完美音乐体验
  • DeepSeek V3技术深扒!MoE+MLA如何让AI推理快如闪电?
  • 国产大模型的具象交互补全:魔珐星云让 Qwen/DeepSeek Agent 拥有 3D 身体
  • YOLOv8知识蒸馏实战:从37%到42% mAP的模型压缩与性能提升
  • MySQL从零到一:Windows/Linux环境搭建与核心操作实战指南
  • 企业级Agentic AI落地指南:从概念到工程实践的五维拆解
  • 智能编码助手实战:从环境配置到视频理解与数据插件的进阶应用
  • 数据分析实战:Excel、SQL、Python与Power BI全流程项目指南
  • MySQL主从同步原理与实战:从一主一从到一主多从配置指南
  • 3步掌握QQ音乐加密音频转换,实现音乐自由播放
  • YOLOv8轻量化船舶检测:CA注意力与深度可分离卷积实战