一:垃圾回收算法:
标记清理算法: 在标记阶段,将通过可达性分析中能找到的对象进行标记出来.然后在清理阶段把数据没有标记的清理掉.以为所有可用对象,在内存中不一定是连续的,所以,导致对象间可能有空间,也就导致了空间碎片.
复制算法:是把内存分成两份,在保存对象的时候只是用其中一块,当需要将对象进行回收的时候,将存活的对象复制到另一块中,然后清空当前内存,很明显在程序运行的时候始终有一个空闲内存没有被使用,
标记/整理算法,是结合标记清除,和复制算法,标记阶段和标记清除算法是一致的,在整理阶段是将存活的对象向一端移动
二:老年代和新生代适合的垃圾回收算法:
对于新生代来说,对象有一个特点,就是存活率非常低,所以在一次GC后,存活的对象,比较少,所以可以使用复制算法,将存活的对象复制到surviver空间中.每一次Gc,存活的对象的年龄,就会加1,知道到达一定阈值后,对象进入老年代,年轻代来及回收有 Serial ,ParNew,Parallel Scavenge
对于老年代老说,对象存活率较高,如果使用复制算法,是比较浪费空间的,随意比较适合标记整理或者标记清除算法.老年代使用的算法有 ParOld ,CMS 等