关于:弱引用(WeakReference)

(弱引用)

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

 

单参数版

 

双参数复活版

 

需要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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值