复制算法专治新生代,因98%对象短命,只搬运存活对象至空闲survivor区,避免扫描死亡对象、消除碎片、提升分配效率;eden与两survivor区协作,gc时复制存活对象并交换角色,空间利用率90%,对象年龄达阈值即晋升老年代。

Java复制算法在新生代高效回收内存,核心在于匹配“对象大多短命”这一现实特征,用极简操作完成高频率清理。
为什么复制算法专治新生代
新生代中约98%的对象存活时间极短(比如方法内临时变量、循环中的中间结果)。复制算法不扫描整个堆,只关注当前存活的对象——数量少、动作快、无碎片。它放弃“清理死亡对象”,转而“搬运存活对象”,逻辑更轻量。
Eden + Survivor 的三区协作机制
新生代默认划分为三块:Eden区(占80%)、From Survivor(10%)、To Survivor(10%)。JVM只使用Eden和其中一块Survivor(如From)来分配新对象,另一块(To)始终空闲。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 当Eden区满时,触发Minor GC
- 扫描Eden + From中所有存活对象,全部复制到To区
- 一次性清空Eden和From区
- 交换From与To的角色,下次GC时To变From、From变To
高效的关键细节
这种设计带来几项直接性能优势:
- 只遍历存活对象:不用逐个检查“谁该死”,省下大量标记时间
- 一次复制即整理:复制过程天然消除碎片,To区内存连续,后续分配新对象只需指针递增(Bump-the-pointer),毫秒级完成
- 空间利用率达90%:虽然有两块Survivor,但实际可用空间是Eden + 一个Survivor = 90%的新生代容量
- 对象年龄可控:每次复制后,对象在Survivor间“熬过一轮”就加1岁;达到阈值(默认15)自动晋升老年代,避免在新生代反复搬运
不是靠“复制”本身快,而是靠“不做什么”
它不维护空闲链表、不合并碎片、不重扫全区域。把复杂度从“清理杂乱现场”降维成“搬完就走”。这种克制,正是它能在毫秒级完成Minor GC的根本原因。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










