标记清除
标记出需要回收的对象,然后回收
效率不高
回收过后,容易产生碎片。万一后续有个大对象需要内存,没有足够的连续内存,就不得不再来一次GC
复制算法
目的:为了解决第1种算法的效率问题。<br>思路:将内存分为大小一样的两块,每次只用一块。<br>一块用完了,就将还活着的对象复制到另一块,然后再清理。循环往复
缺点1:浪费空间
<b>新生代</b>的收集采用改良的复制算法
Eden:Survivor:Survivor = 8:1:1
缺点2:对象存活率高时:复制操作频繁,效率变低
标记整理
目的:为了解决第2种算法的缺点2<br>思路:标记出需要回收的对象,让存活的对象都往一端移动<br>然后清理掉端边界外的内存<br><b>适用于老年代</b>
分代收集
思路:整合以上算法的优点,扬长避短,将内存分为新生代和老年代,各自使用不同的算法收集。<br> 新生代的对象朝生夕灭,只有少量存活,那就用复制算法,付出一点点复制成本即可<br> 老年代对象存活率高,并且不像新生代,新生代中哪怕内存不够存活对象用了,还有老年代来担保。<br> 但老年代没得其他地方给他担保,所以就得采用标记清除或者标记整理算法