news 2026/8/6 14:08:49

JVM 堆内存分代

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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效率,这就是"分代回收"的核心思想。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/5 14:20:01

Java中String类(StringBuffer、StringBuilder)相关

String是Java中用于表示字符串的类,位于java.lang包下(无需手动导入)。两个核心特性:不可变性(Immutable):String 对象一旦创建,其内部的字符序列就无法被修改。看似修改字符串的操作…

作者头像 李华
网站建设 2026/7/15 0:47:53

手把手教你从零搭建SpringBoot项目

手把手教你从零搭建 Spring Boot 项目(2026 最新版超详细教程) Spring Boot 是目前 Java 后端开发最主流的框架,能帮你几分钟内创建一个可运行的生产级应用。下面我们从完全零基础开始,一步一步教你搭建一个标准的 Spring Boot 3…

作者头像 李华
网站建设 2026/7/30 4:28:46

Image-to-Video生成失败?这5个CUDA错误解决方案必看

Image-to-Video生成失败?这5个CUDA错误解决方案必看 背景与问题定位:Image-to-Video二次开发中的典型GPU挑战 在基于 I2VGen-XL 模型的 Image-to-Video 图像转视频生成器 二次构建过程中,开发者“科哥”成功实现了本地化部署和WebUI交互功能。…

作者头像 李华
网站建设 2026/7/28 23:07:00

Sambert-HifiGan高级教程:自定义情感语音合成实战

Sambert-HifiGan高级教程:自定义情感语音合成实战 引言:中文多情感语音合成的现实需求 在智能客服、虚拟主播、有声读物等应用场景中,单一语调的语音合成已无法满足用户体验需求。用户期望听到更具表现力、富有情绪变化的声音——如喜悦、悲…

作者头像 李华
网站建设 2026/7/31 8:11:48

宠物自助新体验:JAVA无人共享洗澡系统源码

以下是一套基于JAVA的宠物无人共享洗澡系统源码方案,该方案整合了微服务架构、物联网通信、AI情绪识别、多端交互等核心能力,适用于宠物店、社区共享场景的无人化改造:一、系统架构设计系统采用四层分布式架构,包括用户端、API网关…

作者头像 李华
网站建设 2026/7/31 3:20:48

如何用Sambert-HifiGan为电子导览生成解说语音?

如何用Sambert-HifiGan为电子导览生成解说语音? 引言:语音合成在电子导览中的价值与挑战 随着智慧文旅、智能展馆和无人化服务的快速发展,高质量的中文语音解说系统已成为提升用户体验的核心组件。传统的预录音频维护成本高、扩展性差&#x…

作者头像 李华