2.2 对象存活判断
2018-03-01 本文已影响0人
9cc222f2bb0a
1. 引用计数算法。无法解决仅仅互相引用的问题。
2. 可达性分析算法。可以通过GC Roots到达的即存活,否则不存活。
可以作为GC Roots的对象:虚拟机栈中引用的对象,方法区中类静态属性引用的对象,方法区中常量引用的对象,本地方法栈中JNI(Native方法)引用的对象。
四种引用方式:
强引用:直接引用,只要强引用在,对象就不会被回收
软引用:描述有用但是非必要的对象,GC不会回收,但在内存溢出异常之前,会回收该类对象
弱引用:描述非必须对象,只会存活到下一次GC之前
虚引用:无法通过虚引用获得对象实例,虚引用的唯一目的是在被回收的时候收到一个系统通知。
最终死亡的过程:如果被可达性分析算法标记为不可达,那么会被第一次标记,然后筛选,筛选的逻辑是判断是否有必要执行finalize方法,判断规则是是否覆盖finalize()方法或者已经执行过该方法