温馨提示×

温馨提示×

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

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

java内存回收何时触发

发布时间:2026-09-19 04:06:14 来源:亿速云 阅读:98 作者:小樊 栏目:编程语言

在 Java 中,内存回收(GC,Garbage Collection)并不是由程序员显式控制的,而是由 JVM 在“合适的时候”自动触发。下面从触发条件、常见场景、不同 GC 的差异三个层面说明。


一、GC 触发的核心条件

1️⃣ 堆内存不足(最常见)

当 新生代(Young Gen)或老年代(Old Gen)空间不足 时,JVM 会触发对应区域的 GC:

  • Minor GC(年轻代 GC)
    • 触发条件:Eden 区满
    • 频率高、速度快
  • Major / Full GC(老年代 GC)
    • 触发条件:
      • 老年代空间不足
      • 方法区(元空间)不足
      • 显式 System.gc()(不保证立即执行)

2️⃣ 对象晋升失败(Promotion Failure)

  • 年轻代对象准备进入老年代,但老年代没有足够空间
  • JVM 会触发 Full GC

3️⃣ 显式调用(不推荐)

System.gc();
  • 只是“建议”JVM 进行 GC
  • JVM 可忽略
  • 一般用于调试

二、不同内存区域的回收时机

堆(Heap)——主要回收区域

区域 回收时机
新生代 Eden 满
老年代 空间不足
元空间 类加载过多

栈(Stack)

  • 线程结束自动释放
  • 不需要 GC

方法区 / 元空间

  • 类卸载时回收
  • 条件苛刻(无引用、无实例、无加载器)

三、GC 触发示例说明

byte[] b = new byte[1024 * 1024 * 10]; // 10MB
b = null;
  • 对象变为“不可达”
  • 但 不会立即回收
  • 下次 GC 时才会清理

四、常见 GC 类型与触发差异

GC 类型 触发条件
Serial GC 年轻代/老年代满
Parallel GC 吞吐量优先
CMS 老年代使用率达到阈值
G1 Region 空间不足

五、总结一句话

Java 内存在“内存不够用”或“JVM 认为该清理了”时触发 GC,而不是对象一变成垃圾就立刻回收。

如果你愿意,我也可以:

  • 结合 JVM 参数讲 GC 触发
  • 用 GC 日志示例说明
  • 讲 如何避免频繁 Full GC

你更想了解哪一块?

向AI问一下细节

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

AI
助
手