1.标记-清除(老年代)
先标记一下不在存活(可达性分析后,两次标记都被选中,切没有再finalize()中自救的的结果),然后进行清除,后果是带来内存碎片化严重,也会因为分配不到足够连续的空间而频繁触发GC,直到Out of Memory。
作者:可文分身
链接:https://www.jianshu.com/p/b0f5d21fe031
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.复制算法(新生代)
对标记清理进行优化,划分2个区域,把一个区域的需要回收复制到另外一个区域,然后把当前区域清出掉,以空间换时间,解决效率问题,同时带来了空间利用率的问题。这种算法比较适合少量对象存活需要复制的场景。商用上常常用来回收新生代,并且 Eden和S区的比例默认设置为8:1。
3.标记-整理算法(老年代)
对于存活率较高的内存区域,垃圾回收用复制算法显然是不合适的,因为复制对象既需要较大的空间成本,页需要一定的时间效率成本。因词标记整理应运而生。即标记依然存活的对象到内存区域的一端,然后以分界线进行清除需要清理的一端,在商用上常常用于老年代的垃圾回收。
4.分代回收算法
目前几乎所有的JVM厂商都会采用的算法,划分新生代、老年代,进而根据情况使用不同的垃圾回收算法。
网友评论