写前面几章节主要是为后面垃圾回收器优化做铺垫
经典的垃圾回收算法以下几种
一、标记--清除算法(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 回收器使用的算法)
图示:
回收前状态:
回收后状态:
优缺点:
避免了,空间的浪费,与内存碎片问题。
缺点:整理时复制有效率成本。