判断对象已死
引用计数算法:缺点是无法解决对象循环引用。
可达性分析算法:从GC Roots开始向下搜索,不可达的就可以回收。
四种引用状态
强引用(Strong Reference):new出来的,只要强引用还存在垃圾回收期就不会回收。
软引用(Soft Reference):发生内存异常之前会回收。
弱引用(Weak Reference):只要执行收回就会回收掉。
虚引用(Phantom Reference):虚引用完全不会对生存时间构成影响也无法取得对象实例,唯一目的就是能在对象被回收时收到一个系统通知。
垃圾收集算法
标记-清除算法
缺点:标记和清除效率都不高;标记清除之后产生大量不连续的内存碎皮。
标记-整理算法
标记,将存活对象一段移动,直接清理掉端边界以外的内存。
复制算法
只使用一半内存,然后这一半内存用完了则将活着的复制到另一半,然后清理掉这一半。
缺点:内存为原来的一半。
改进:80%Eden+2*10%Survivor。
适用场景:新生代。
不适场景:存活率较高时,比如老年代。
分代收集算法
新生代采用复制算法:80%Eden+2*10%Survivor。
老年代采用标记-整理、标记-清除算法。