垃圾回收-算法

标记清除算法
首先标记出所有需要回收的对象,在标记完成之后,统一回收掉所有被标记的对象。
在这里插入图片描述
缺点:当有大量的对象需要被回收的时候,会导致标记和清除两个过程的执行效率都随着对象数量增长而降低
会产生大量不连续的内存碎片
标记复制算法
将可用内存按照容量划分大小相等的两块,每次只使用其中的一块。当这一块的内存用完之后,就将还存活的对象复制到另外一块上面,然后再把已经使用过的内存空间一次清理掉。
在这里插入图片描述
缺点:产生大量的内存空间复制的开销
标记整理算法
先对对象进行标记,然后让所有存活的对象都向内存空间一段进行移动然后直接清理掉边界以外的内存。
在这里插入图片描述
缺点:
因为要移动对象,需要暂停用户程序,效率比较低

分代回收
对象被创建使用之后便丢弃放入新生代
对象长期使用放入老年代
在这里插入图片描述
对象诞生后放入Eden区和其中一块survivor区,当Eden区和其中survivor区内存满了之后会触发一次minorGC,将存活的对象复制到另一块surivor区中
在这里插入图片描述
当另一块surivor区中的内存满了之后,会进行分配担保,将一些对象直接放入到老年代中。
如果所有的区域内存都满了时,会触发full gc 暂停其他用户线程,等待垃圾回收完之后再恢复。

Guess you like

Origin blog.csdn.net/nice_good_boy/article/details/120166121