谈谈java中的WeakReference
来源:互联网 发布:java 跨域上传文件 编辑:程序博客网 时间:2024/05/15 22:42
本文只针对java中的弱引用进行一些分析,如有出入还请多指正。
在分析弱引用之前,先阐述一个概念:什么是对象可到达和对象不可到达状态。
其实很简单,我举个例子:
现在有如下两个类class A class B,在JVM上生成他们两个类的实例分别为 instance a instance b
有如下表达式:
A a = new A();
B b = new B();
两个强引用对象就生成了,好吧,那么这个时候我做一下修改:
A a = new A();
B b = new B(a);
B的默认构造函数上是需要一个A的实例作为参数的,那么这个时候 A和B就产生了依赖,也可以说a和b产生了依赖,我们再用一个接近内存结构的图来表达:
a是对象A的引用,b是对象B的引用,对象B同时还依赖对象A,那么这个时候我们认为从对象B是可以到达对象A的。
于是我又修改了一下代码
A a = new A();
B b = new B(a);
a = null;
A对象的引用a置空了,a不再指向对象A的地址,我们都知道当一个对象不再被其他对象引用的时候,是会被GC回收的,很显然及时a=null,那么A对象也是不可能被回收的,因为B依然依赖与A,在这个时候,造成了内存泄漏!
那么如何避免上面的例子中内存泄漏呢?
很简单:
A a = new A();
B b = new B(a);
a = null;
b = null;
这个时候B对象再也没有被任何引用,A对象只被B对象引用,尽管这样,GC也是可以同时回收他们俩的,因为他们处于不可到达区域。
弱引用来了!
A a = new A();
WeakReference wr = new WeakReference(a);
//B b = new B(a);
当 a=null ,这个时候A只被弱引用依赖,那么GC会立刻回收A这个对象,这就是弱引用的好处!他可以在你对对象结构和拓扑不是很清晰的情况下,帮助你合理的释放对象,造成不必要的内存泄漏!!
- 谈谈java中的WeakReference
- 谈谈java中的WeakReference
- 谈谈java中的WeakReference
- 谈谈java中的WeakReference
- 谈谈java中的WeakReference
- 谈谈java中的WeakReference
- 谈谈java中的WeakReference
- 谈谈java中的WeakReference
- 谈谈java中的WeakReference
- 谈谈java中的WeakReference
- 谈谈java中的WeakReference
- 谈谈java中的WeakReference
- 谈谈java中的WeakReference
- java中的WeakReference
- Java中的WeakReference
- Java中的WeakReference解析
- Java中的WeakReference讲解
- 0156 java中的WeakReference
- Oracle附加数据库
- 安卓系统Launcher的开发(转)
- iOS学习笔记——iOS组件之UIScrollView详解
- 高通平台手机开发之LCD
- 关于屏幕适配的一些看法
- 谈谈java中的WeakReference
- Java 内存区域和GC机制(转)
- 安卓开发如何提高Android程序的效率(转)
- 什么是VPN隧道
- 关于AccessibilityService的用法(转)
- Android Activity为什么要细化出onCreate、onStart、onResume、onPause、onStop、onDesdroy这么多方法让应用去重载?(转)
- 2. Add Two Numbers
- Android 特色开发,基于位置的服务
- OpenCV中一些数据结构的别名