Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

    • Java基础

    • Java集合

    • Java并发

    • JVM

      • JVM内存模型
      • JVM垃圾回收中的道法术器
      • Minor GC,Major GC,Young GC,Old GC,Major GC有什么区别
      • Minor GC时老年代在干什么
      • ​​Major GC时年轻代在干什么
      • Full GC​时年轻代和老年代在干什么
      • 常用垃圾回收器对比
      • OOM、内存泄漏与内存溢出的区别解析
      • 类的加载机制
  • Spring

  • SpringCloud

  • MySQL

  • Redis

  • 分布式

  • Zookeeper

  • Dubbo

  • Kafka

  • 数据结构

  • 算法

  • OJ

  • 从道家哲学看计算机?
  • 后端
  • Java
  • JVM
plantre
2025-05-04

Full GC​时年轻代和老年代在干什么

Full GC时年轻代与老年代的行为解析

Full GC(全局垃圾回收)是Java虚拟机(JVM)中代价最高、影响最大的垃圾回收过程,涉及整个堆内存(年轻代、老年代)及方法区(永久代/元空间)的全面回收。以下从年轻代和老年代的行为特点、触发条件及优化方向三个维度展开说明:


一、Full GC时年轻代的行为

  1. 暂停分配与全面回收
    • 暂停新对象分配:Full GC期间,所有用户线程停止(STW),年轻代无法分配新对象,直至回收完成。

    • 全面清理:年轻代的Eden区和Survivor区会被完全回收,存活对象可能直接晋升到老年代(若老年代空间足够),或触发更复杂的内存调整机制(如空间分配担保失败)。

    • 算法选择:不同收集器对年轻代的处理方式不同。例如,G1收集器的Mixed GC会同时回收部分年轻代和老年代Region,而Parallel Old等收集器可能采用标记-整理算法统一处理。

  2. 晋升失败的连锁反应
    • 若Full GC由年轻代晋升失败触发(如Survivor区无法容纳存活对象),年轻代在回收时会尝试将存活对象强制转移至老年代。若老年代空间不足,则会进一步触发Full GC循环,加剧性能问题。


二、Full GC时老年代的行为

  1. 空间整理与碎片处理
    • 标记-清除与整理:老年代通常采用标记-清除或标记-整理算法。例如,CMS收集器在Full GC时需处理因并发回收产生的内存碎片,而Parallel Old收集器通过整理提升内存连续性。

    • 大对象与长期对象回收:老年代中的大对象(如缓存数据)和长期存活对象(如全局配置)会被识别并回收,释放连续内存空间。

  2. 触发条件的影响
    • 空间不足:老年代内存不足是Full GC最常见的触发原因。例如,动态年龄判断导致Survivor区对象批量晋升,或元空间(Metaspace)耗尽间接引发老年代压力。

    • 收集器特性:CMS收集器在并发模式失败(Concurrent Mode Failure)时需回退到Serial Old进行Full GC,此时老年代需同步处理年轻代与自身的回收,导致长时间停顿。


三、优化方向与建议

  1. 减少Full GC触发频率
    • 调整堆内存比例:通过-Xmn增大年轻代,避免过早晋升;通过-XX:MaxTenuringThreshold调整晋升年龄阈值。

    • 规避大对象直接分配:使用-XX:PretenureSizeThreshold限制大对象直接进入老年代(仅适用于Serial/ParNew收集器)。

  2. 提升回收效率
    • 选择低延迟收集器:G1或ZGC通过分Region回收和并发压缩技术,减少Full GC的全局停顿时间。

    • 监控与调优:通过GC日志分析工具(如GCeasy、VisualVM)识别内存泄漏或碎片化问题,动态调整参数。


总结 • 年轻代:Full GC期间暂停分配并强制清理,存活对象可能直接晋升或触发回收失败循环。

• 老年代:需处理长期存活对象、碎片整理及空间担保机制,不同收集器的回收策略差异显著。

• 核心优化点:通过合理分代、选择收集器及动态监控,平衡内存分配与回收效率,避免Full GC对系统性能的冲击。

编辑 (opens new window)
上次更新: 2025/06/10, 09:18:05
​​Major GC时年轻代在干什么
常用垃圾回收器对比

← ​​Major GC时年轻代在干什么 常用垃圾回收器对比→

最近更新
01
集成loki
07-04
02
TCP的ESTABLISHED是什么意思
06-24
03
安装1panel
06-24
更多文章>
Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式