java 引用和垃圾回收
流程
- 判断一个对象是否可以被回收首先要 判断是否有指向对象的引用
- 如果没有引用 直接回收
- 然后判断是否有强引用(可以有多个)
- 如果有至少1个强引用 则不回收
- 如果没有强引用 判断是否有软引用
- 如果有软引用 判断jvm内存是否超出
- 如果超出 就回收这个对象 将弱引用加入到引用队列
- 如果没有超出 或者 没有软引用 就判断是否有弱引用
- 如果有弱引用 直接回收 并且将弱引用加入到 引用队列
10.如果没有弱引用 判断是否有虚引用 (虚引用对垃圾回收没有影响 只是jvm对象的生命周期的一个钩子函数而已 通过它可以看到对象何时被回收的) - 如果有虚引用 将虚引用加入到引用队列
使用
参考
- https://www.jianshu.com/p/e5364c05cc80