JAVA弱引用

什么是JAVA弱引用

简单来讲就是不保证不被垃圾回收器回收的引用地址。所以这个还是和垃圾回收器有关,那什么样的地址会被垃圾回收器回收呢?在堆中没有强引用链关联的内存地址将被垃圾回收器回收,回收之前将调用finalize()方法。

那么String s = "abc",就可以称之为强引用,等s = null。垃圾回收器就会在某个时刻自动将"abc"占用的内存回收掉。

而弱引用(WeakReference)其生命周期是比较短暂,尽管在那个时刻此地址还关联到一个变量地址,但是垃圾回器依然会执行清理命令,回收地址。

在JDK中用的比较多的有WeakHashMap,

弱引用最适宜的地方有:占用大量内存,但通过垃圾回收功能回收以后很容易创建。比如近期项目中session生命周期内的一个起缓存用的变量,此变量是记录关联到当前用户的一些汇率信息,因为一次加载比较多,而且取值频繁,所以用了WeakHashMap。一来如果用户一段时间不触发应用的话,内存自动会被清理,二来取值也方便,就是从数据库中直接取出再放入HashMap中。

最后附上一篇写的不错的文章,文中还涉及到了软引用和虚引用及一些代码案例。

http://www.233.com/Java/jichu/20070320/131115654.html

 

最后再加上短弱引用和长弱引用

Short

垃圾回收器回收对象后,短弱引用的目标自动变为NULL。弱引用本身是托管对象,和任何其它托管对象一样需要经过垃圾回收。短弱引用是WeakReference对象默认的构造函数。

Long

调用对象的finalize方法后,会保留长弱引用。这样,你就可以重新创造该对象,但该对象仍处理不可预知的状态。要使用长弱引用,要在WeakReference构造函数中指定true

如果对象的类型没有finalize方法,则自动应用弱引用功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值