温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java内存管理包含什么

发布时间:2026-08-31 09:43:33 来源:亿速云 阅读:88 作者:小樊 栏目:编程语言

Java 内存管理(Memory Management)主要指的是 JVM 对内存的分配、使用、回收与监控机制。它整体上可以分为 内存区域划分(运行时数据区)垃圾回收机制(GC) 两大部分,同时也涉及对象创建、内存溢出与调优等内容。

下面从 整体结构 → 各部分说明 → 关键点总结 来系统说明。


一、Java 内存管理的整体组成

Java 内存管理主要包括:

  1. JVM 运行时数据区(内存划分)
  2. 对象创建与内存分配
  3. 垃圾回收机制(GC)
  4. 内存监控与调优

二、JVM 运行时数据区(核心)

根据《Java 虚拟机规范》,JVM 内存主要分为以下几部分:

1️⃣ 程序计数器(Program Counter Register)

  • 线程私有
  • 记录当前线程执行的字节码指令地址
  • 不会发生 OOM

✅ 作用:
用于线程切换后恢复执行位置。


2️⃣ Java 虚拟机栈(JVM Stack)

  • 线程私有
  • 每个方法调用会创建一个 栈帧
  • 栈帧包含:
    • 局部变量表
    • 操作数栈
    • 动态链接
    • 方法返回地址

✅ 异常情况:

  • StackOverflowError
  • OutOfMemoryError

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

  • 线程私有
  • 为 native 方法服务
  • HotSpot 中常与 JVM 栈合并

4️⃣ 堆(Heap)⭐️(最重要)

  • 线程共享
  • 存放 对象实例和数组
  • GC 的主要工作区域

堆的分代结构(HotSpot JVM):

Young Generation(新生代)
 ├ Eden
 ├ Survivor From
 └ Survivor To

Old Generation(老年代)

✅ 特点:

  • 是 Java 内存管理中面积最大、最复杂的部分
  • 几乎所有对象都在这里分配

5️⃣ 方法区(Method Area)

  • 线程共享
  • 存储:
    • 类信息
    • 常量
    • 静态变量
    • JIT 编译后的代码

JDK 版本差异:

JDK 版本 实现
≤ JDK 7 PermGen(永久代)
≥ JDK 8 Metaspace(元空间)

✅ 异常:

  • OutOfMemoryError: Metaspace

6️⃣ 运行时常量池(Runtime Constant Pool)

  • 方法区的一部分
  • 存放编译期生成的常量
  • 支持动态常量(如 String::intern

7️⃣ 直接内存(Direct Memory)⚠️

  • 不属于 JVM 规范
  • 使用 NIODirectByteBuffer
  • 不受 GC 直接管理,但会被间接回收

✅ 异常:

  • OutOfMemoryError: Direct buffer memory

三、对象创建与内存分配

对象创建流程

  1. 类加载检查
  2. 分配内存
  3. 初始化零值
  4. 设置对象头
  5. 执行构造方法

内存分配方式

  • 指针碰撞(Bump the Pointer)
  • 空闲列表(Free List)

是否并发安全:

  • 使用 TLAB(Thread Local Allocation Buffer)

四、垃圾回收(GC)机制 ⭐️

1️⃣ 哪些内存需要回收?

  • 方法区(回收条件苛刻)

2️⃣ 如何判断对象可回收?

引用计数法(Java 未使用)

  • 无法解决循环引用

可达性分析(Java 使用)

  • GC Roots 开始
  • 不可达对象可被回收

✅ GC Roots 包括:

  • 栈中局部变量
  • 静态变量
  • 常量
  • JNI 引用

3️⃣ 垃圾回收算法

算法 说明
标记-清除 有碎片
标记-复制 新生代
标记-整理 老年代
分代收集 综合使用

4️⃣ 常见垃圾回收器

回收器 特点
Serial 单线程
Parallel 吞吐量优先
CMS 低延迟
G1 区域化、可控停顿
ZGC 超低延迟(JDK 11+)

五、内存溢出与调优

常见 OOM

  • Java heap space
  • Metaspace
  • Unable to create new native thread
  • Direct buffer memory

常用 JVM 参数

-Xms -Xmx      # 堆大小
-XX:MetaspaceSize
-XX:+UseG1GC
-XX:+PrintGCDetails

六、一句话总结

Java 内存管理 = JVM 内存区域划分 + 对象分配机制 + 垃圾回收机制 + 内存监控与调优

如果你愿意,我可以:

  • 一张图 帮你理解 JVM 内存结构
  • 结合 实际 OOM 案例 讲解
  • 面试角度 帮你总结高频问题
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI