当前位置: 首页 > 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.jsqmd.com/news/1100131/

相关文章:

  • HDFS的文件的读写流程及常用命令
  • 01 · 当 AI 学会“按规矩办事“——规范驱动 Agent 工作流总览
  • 终极指南:如何快速上手MoeKoe Music开源酷狗音乐客户端
  • 从零到一:如何用Citizens2打造沉浸式Minecraft服务器体验
  • 基于改进YOLOv8与无人机的电动自行车违规行为智能检测系统
  • GitLab架构演进:应对AI时代代码分析与高并发挑战
  • 胜券助手已进化为SenClaw:百胜智能中台自带的“免费数字员工”
  • 按位取反是对补码的取反,和之前的求反码的规则类似,但是首位的符号位是改变的,剩下的位数0和1互换,说白了就是每一位都取反
  • 谈谈 2026 年 Altera 的 FPGA 产品线
  • 为何建议等Wi-Fi 8?
  • AI 驱动智能合约漏洞检测:从静态模式匹配到图神经网络的深度审计
  • STL文件太大怎么办?3D模型轻量化实战分享
  • 基于改进YOLOv8的无人机航拍电动自行车违规行为检测实践指南
  • AI Agent实战指南:从核心能力到本地部署的完整路径
  • 基于YOLOv8的轻量化船舶检测:实现可见光与红外图像的高精度识别
  • OpenClaw:让 AI 拥有执行能力的开源本地智能体框架
  • 叉车采购选哪家?这几点帮你精准锁定
  • 2024年HTTP协议安全实战:从头部配置到HTTP/3攻防
  • 数据质量不过关,数据中台就是垃圾进垃圾出:从评价指标到治理闭环的技术拆解
  • 影刀RPA新手教程:电商评论挖掘完全指南——批量采集用户评论、情感分析与词云生成
  • AI Agent本地部署实战:从零构建具备规划与工具调用能力的智能体
  • 终极指南:3分钟上手!零基础文本分析工具KH Coder让数据分析像刷朋友圈一样简单
  • vivo X Fold6开售:稳健策略下,能否跨越折叠屏与AI生态门槛?
  • WorkBuddy AI助手:自然语言查询数据库实战指南与安全实践
  • DTSS认证咨询机构哪家值得推荐
  • 轻量化YOLOv8船舶检测模型:跨模态鲁棒性与边缘部署实战
  • Linux strip 命令 | 详解及在 Linaro 交叉编译工具链中的使用
  • 指夹式脉搏血氧仪PCBA整体方案
  • YOLOv8知识蒸馏实战:让小模型获得大模型的精度
  • AI辅助科研工作流:从Idea到论文草稿的DraftPaper_Loop实践