写前面几章节主要是为后面垃圾回收器优化做铺垫
经典的垃圾回收算法以下几种
一、标记--清除算法(Mark-Sweep) ( CMS回收器使用的算法 ,FullGc后可以配置内存整理)
图示:
回收前状态:
![]()
回收后状态:


优缺点:
算法执行分为两个阶段标记与清除,所有的回收算法,基本都基于标记回收算法做了深度优化
缺点:效率问题,内存空间碎片(不连续的空间)
二、复制算法(Copying) (Serial / ParNew / ParallelScavenge / SerialOld / ParallelOld 回收器使用的算法 )
图示:
回收前状态:
Eden内存空间 8

Survivor1空间(From空间)1

Survivor2空间(To空间) 1

Eden内存空间与Survivor空间 8:1
![]()
回收后状态:

Survivor1空间(From空间)1

Survivor2空间(To空间) 1

Eden内存空间与Survivor空间 8:1

优缺点:
比较标记清除算法,避免了回收造成的内存碎片问题,
缺点:以局部的内存空间牺牲为代价,不过空间的浪费比较小,默认8:1的比例1是浪费的。
复制也有一定的效率与空间成本
三、标记整理算法(Mark-Compact) ( G1 回收器使用的算法)
图示:
回收前状态:

回收后状态:

优缺点:
避免了,空间的浪费,与内存碎片问题。
缺点:整理时复制有效率成本。

本文深入探讨了三种经典的垃圾回收算法:标记--清除算法、复制算法及标记整理算法,分别阐述了它们的工作原理、优缺点,并说明了这些算法在不同Java垃圾回收器中的应用。
589

被折叠的 条评论
为什么被折叠?



