一文彻底解析Java 中的弱引用
|
者深刻的理解什么是弱引用,如何使用弱引用,什么场景下会使用弱引用,弱引用可以解决什么样的问题,以及它的源码实现是怎样的,其中会涉及的内存溢出,垃圾回收原理 作用: jdk 官网解释:
个人理解:
案例深度解析
理想的情况下,我们希望当我们不再使用一个对象的时候,能够在gc 发生的时候就把它回收掉。但是有些时候,由于我们的粗忽,在坏的情况下会导致内存溢出。这种案例尤其发生在一个生命使用周期很长的map 存放了很多实际使用生命周期短的对象。请看下面这个例 输出的结果可以看到,即使我们通过把key和value 设置为null 来告诉jvm,我们不再使用这个对象了,map 里面对象依然没有被GC 回收,因为key和value 被一个强引用map 指向,根据可达性判断,垃圾回收器是不能回收掉key和value 这个对象的。map 被定义为statis 的静态变量,是一个使用生命周期很长的对象。在strongTest()方法中存在了一个key和value 的局部变量,它随着方法的执行完,这个变量的生命使用周期就结束了,但是粗糙的程序员忘记remove 了,这个时候垃圾回收器是不能回收它的。如果这种生命周期相对短的对象很多,最终就有可能消耗掉JVM中全部的内存。 但是这里我有一个好奇,假如这里的key和value 指向的对象在执行完strongTest()方法 以后用不着了,但是我可能又不是很好的判断去主动调用remove 来移除它。想要垃圾回收器自己判断回收掉可不可以呢?答案其实是可以的,这个时候就是弱引用上场了,请看下面程序 (编辑:烟台站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


