Office中国论坛/Access中国论坛

标题: 【原创】关于:弱引用(WeakReference) [打印本页]

作者: faunus    时间: 2014-2-23 10:28
标题: 【原创】关于:弱引用(WeakReference)
(弱引用)

[1]强引用
如果有强引用存在,GC是不会回收对象的。
[2]弱引用
弱引用可以让您保持对对象的引用,
同时允许GC在必要时释放对象,回收内存。
[3]弱引用使用场景
对于那些创建便宜但耗费大量内存的对象,
希望保持该对象,又要在应用程序需要时使用,
同时希望GC必要时回收时,可以考虑使用弱引用。

作者: faunus    时间: 2014-2-23 10:28
单参数版








作者: faunus    时间: 2014-2-23 10:28
双参数复活版








作者: faunus    时间: 2014-2-23 10:28
需要Finalize的对象在最终释放前会有一次复活,第二个参数的作用。
[1]短引用
第二个参数给false,这个弱引用就是一个short weak reference(短弱引用),
当GC回收时,发现根中没有这个对象的引用了,就认为这个对象无用,
这时短弱引用对这个对象的跟踪到此为止,弱引用的 Target被设置为null。
[2]长引用
如果第二个参数给true,这个弱引用就是一个long weak reference(长弱引用)。
在对象的Finalize方法没有被执行以前,Target都可用。
不过这是对象的某些成员变量也许已经被回收,所以使用起来要想当小心。
[3]finalize对象“复活”
short weak reference会忽略,即wr.Target会置null,
而long weak reference则会跟踪,wr.Target仍然refer to 原对象,这个是两者的最大区别。
如果没有finalize,则两种weak reference表现完全相同。

原理:
GC维护了两个列表来跟踪两种弱引用的目标对象,
在一个 WeakReference对象创建时,
它在相应的列表中找到一个位置,
将目标对象的引用放入,
很显然,这两个列表不是根的一部分。
在GC进行内存回收的时候,如果要回收某一个对象,
会检查弱引用的列表,如果保存着这个对象的引用,
则将其设为null。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3