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

JVM 堆内存分代

今天我们一起来聊一聊JVM 堆内存

Java Heap(堆内存)由Young Generation(新生代,约占1/3)和Old Generation(老年代,约占2/3)组成。

Young Generation又由Eden Space(伊甸园区,占新生代80%)、Survivor Space 0(幸存者区0,占新生代10%)和Survivor Space 1(幸存者区1,占新生代10%)组成。

对象的生命周期

Young Generation(新生代):

  • 存储新创建存活周期极短的对象,比如方法内的局部变量、临时对象。默认占堆总容量1/3
  • 触发Minor GC(新生代 GC),频率极高(毫秒 / 秒级),但耗时极短(几十毫秒)。
  • Eden 区是 Minor GC 的 "触发源头",调大 Eden 区可减少 Minor GC 次数。

Eden Space(伊甸园区):新对象的 "默认出生地",99% 的新对象都会优先分配到 Eden 区(除非是超大对象直接进入老年代)。占新生代80%

Survivor Space 0/1(幸存者区 0/1,简称 S0/S1,也叫 From 区 / To 区):

  • 新生代 GC 后存活对象的"临时中转站",避免存活对象直接进入老年代。两个区会动态互换角色。各占新生代10%,合计 20%。
  • S0 和 S1永远有一个是空的(这是 JVM 的设计巧思)。
  • 每经历一次 Minor GC,存活对象的"年龄 + 1"

S0/S1 的交互示例:

  • ① 初始状态:Eden 有对象,S0 有对象,S1 为空;
  • ② Eden 触发 Minor GC → 回收 Eden+S0 的垃圾对象,存活对象复制到 S1,清空 Eden+S0;
  • ③ 此时 S1 非空、S0 为空,两者角色互换(S0=To 区,S1=From 区);
  • ④ 下次 Minor GC 重复上述过程,存活对象在 S0/S1 之间"来回复制"

Old Generation(老年代):

  • 存储长期存活、体积较大的对象,比如单例对象、缓存对象、经历多次 Minor GC 仍存活的对象。默认占堆总容量2/3
  • 触发Major GC / Full GC,频率极低,但耗时极长。
  • 老年代大小决定 Full GC 频率 —— 老年代越大,Full GC 频率越低,但单次 Full GC 耗时越长。

对象进入老年代的条件

  • 年龄达标:对象在 S0/S1 之间复制次数达到阈值(默认 15 次,-XX:MaxTenuringThreshold调整);
  • 大对象:超过阈值的对象(-XX:PretenureSizeThreshold)直接进入老年代;
  • 空间担保失败:Minor GC 后 Survivor 区放不下存活对象,多余对象直接晋升老年代;
  • 动态年龄判断:Survivor 区中相同年龄对象总和超过 50%,该年龄及以上对象直接进入老年代。

不同存活周期的对象放在不同区域,用不同算法回收,保证GC效率,这就是"分代回收"的核心思想。

http://www.jsqmd.com/news/220830/

相关文章:

  • codex思维迁移:如何构建自己的AI视频生成器?
  • 马克思主义与认识论:巴舍拉、康吉莱姆与福柯的思想交汇
  • 响应式Web测试最佳实践
  • Sambert-HifiGan语音合成服务性能基准测试
  • Sambert-HifiGan多情感语音合成:如何实现情感自然过渡
  • JAVA中对象的几种比较
  • 云服务器按小时计费:节省50%算力开支的方法
  • 【Java毕设全套源码+文档】基于springboot的网络云端日记本系统设计与实现(丰富项目+远程调试+讲解+定制)
  • Sambert-HifiGan语音合成服务的自动化测试方案
  • 文旅宣传创新:景区照片转沉浸式游览视频生成实践
  • 你的提示词够精准吗?Image-to-Video动作控制秘诀揭秘
  • 【Java毕设全套源码+文档】基于springboot的物流配送中心信息化管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 【Java毕设源码分享】基于springboot+vue的校园失物招领平台的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 程序员副业新思路:用Image-to-Video接单变现
  • Java后端如何对接AI?Image-to-Video API调用示例
  • 基于S7-200Smart PLC的恒压供水程序与485通讯样例+人机触摸屏操作实践案例
  • 度量标准重构:从“点击诱饵”到“知识节点”的评估体系设计
  • 如何快速掌握STIX Two字体:面向学术写作新手的完整教程
  • 生成效果差?输入图像选择的4个黄金法则
  • 揭秘9款AI论文工具:免费写开题报告的隐藏技巧,导师不会说!
  • Sambert-HifiGan在智能家居中的应用:让设备开口说话
  • 西门子博图 WinCC V15 大型自动化系统项目实战分享
  • 突破限制:OpenCore Legacy Patcher让旧款Mac焕发新生的完整指南
  • Linux 端口与连接一眼看清|使用服务器部署 Socket 监控工具 somo
  • ddu官网技术参考:工业级图像处理流水线集成AI视频模块
  • openspeedy加速I2V推理:TensorRT优化让生成快一倍
  • Sambert-HifiGan多情感语音合成的实时流式处理
  • 【Java毕设源码分享】基于springboot+vue的学生就业信息管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 深度优化:如何让Sambert-HifiGan在CPU上跑得更快
  • Sambert-HifiGan语音合成模型的增量训练