JAVA中的WeakReference(弱引用)
来源:互联网 发布:数据统计网站模板 编辑:程序博客网 时间:2024/05/17 09:19
java语言中为对象的引用分为了四个级别,分别为 强引用 、软引用、弱引用、虚引用。
本文只针对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中的强引用、软引用(SoftReference)、弱引用(WeakReference)和幽灵引用(PhantomReference)
- Java:WeakReference 弱引用
- Java 弱引用WeakReference
- C#中的弱引用(WeakReference)
- WeakReference(弱引用)
- WeakReference(弱引用)
- WeakReference(弱引用)
- C#中的弱引用(WeakReference
- java弱引用(WeakReference)和SoftReference的区别
- Java 引用 WeakReference
- Java 引用 WeakReference
- Java 引用 WeakReference .
- Java 引用 WeakReference
- Java 引用 WeakReference
- Java 引用 WeakReference
- Java 引用 WeakReference
- C++程序编译过程简介
- android下拉刷新控件之第三方开源控件的使用实现
- SUID,SGID,Sticky Bit详解
- Ubuntu14.04安装运行bochs
- 2012年5月SAT香港真题解析
- JAVA中的WeakReference(弱引用)
- 收藏网站77
- Java读写Windows共享文件夹
- 自定义SpringMVC配置文件名称以及路径
- 收藏网站78
- Oracle学习笔记(3)-----------命令大全
- ubuntu下出现The system is running in low-graphics mode的问题
- Android双击事件
- 线程同步——互斥锁