情景
处理Android内存泄漏的时候发现引用类型的使用,这里简单理解。
强引用 StrongRefrence
具有强引用的对象,永远不会被GC回收,Android常见内存泄漏也一般是持有了应该销毁掉的如Context对象的强引用导致无法释放Context对象。
new Object()方法创建对象为强引用对象。
软引用 SofrRefrence
内存不足时,回收。
即JVM进行Full GC时才会销毁数据。
常用于实现高速缓存。
弱引用 WeakRefrence
发生GC,无论内存是否充足,都会销毁。
常用于结合WeakHashMap实现规范化映射
虚引用 PhantomRefrence
随时都可能被回收,个人猜测在Minor GC时进行回收。
而且必须使用RefrenceQueue,前三个都选择使用。
同时 PhantomRefrence.get() 恒等于 null。
主要用于检测对象是否从内存中删除
RefrenceQueue
通过 new XXXRefrence(Object obj, RefrenceQueue queue)传入。
当Refrence引用的对象被回收之后,Refrence对象被放入Queue。
即:RefrenceQueue用于获取已经失去引用对象的Refrence对象,
进行销毁Refrence对象。
回收Refrence对象
Refrence ref = null;
while((ref = queue.poll()) != null ){
ref.clear();// 清除ref
}