per*_*ser 3 java garbage-collection soft-references
我知道在Java中我们有软引用的概念.如果:
1)软引用"sf"指对象A.
2)在对象A中,它具有强引用,指对象B.
3)对象A和B不在任何其他地方引用.
根据定义,对象A和对象B都"可以轻柔地到达",对吗?
然后说我们现在用完了内存,GC开始了.是否有可能GC会回收对象B而不是对象A?
如果是这种情况,稍后如果我们想通过"sf"访问对象B,它将为null.java如何避免这种情况发生?
我在java doc中没有看到任何解释.
然后说我们现在用完了内存,GC开始了.是否有可能GC会回收对象B而不是对象A?
不会.GC不会破坏可到达对象中的强引用.(当然,作为回收过程的一部分,它会破坏无法到达的对象中的引用.但是你无法观察到这种情况......因为要观察它,你需要仍然可以访问该对象.)
这是java.lang.ref包中javadoc中此语句的结果.
"最后,当一个对象无法访问时,因此无法以上述任何方式访问,因此有资格进行回收."
......"上述方式"包括强大,柔软,虚弱和虚幻的可达性.
这两个突出显示的词语意味着回收资格是处于无法到达状态的结果.由于其他州都没有提到填海资格,我们得出结论,不可达性是填海工程的先决条件.
这肯定与常识一致.如果(假设)允许GC在可达对象中"清空"强引用,则应用程序在进入此状态后无法安全地处理对象.(考虑一下这个被引用的引用是在库类的实例中的情况......)
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |