引用计数法:对象每被引用一次就+1,为0时回收,速度很快但是无法识别循环引用
标记清除法:遍历所有对象,标记没被引用的,然后统一清除。缺点是效率低、清理后内存不连续。
复制清除法:将内存分为两块,其中一块写满后,遍历对象标记有用的对象复制到另一块,然后把这一块清理,这样复制的内容很少而且内存始终连续,缺点是始终需要有一块内存空出来用于复制。
标记整理法:遍历出有用的对象,将这些对象全都向一端移动,然后清理其它空间,一样能腾出连续的内存,但是移动对象的成本比复制大得多。
GC采用分代收集法:年轻代采用复制清除法,每当eden满时,就遍历出eden和幸存者1区的有用对象复制到幸存者2区,然后清空重新写起。因此无论何时一定有一个幸存者区是空的。老年代由于有用的对象很多所以复制成本高,采用标记整理法减少复制。