1、判断对象是否已死
1.1 引用计数算法?
java没有用引用计数算法,难于解决对象间的相互引用问题。
1.2 可达性分析算法
通过GC Roots为起点,如果没有达到一个对象,则不可达。
可作为GC Roots的对象:
1)栈中的引用的对象。
2)方法区中类静态属性引用的对象。
3)方法区中常量引用的对象。
4)本地方法栈中JNI引用的对象。
1.3 再谈引用
分类:
1)强引用
2)软引用
3)弱引用
4)虚引用
1.4 回收方法区
回收方法区:废弃的常量和无用的类
2、垃圾回收算法
2.1 标记-清除算法
两阶段:标记和清除
有效率和碎片问题。
2.2 复制算法
只使用内存的半区,快速和不用考虑碎片问题。
代价是只能使用内存的一半。
新生代采用这种算法:8:1:1。
2.3 标记-整理算法
老年代采用这种算法。