什么是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方法,则自动应用弱引用功能。