java对对象的引用有如下4中方式:
硬引用(StrongReference)
程序创建一个对象,并把对象覆盖一个引用变量,通过这个引用变量操作实际的对象。当一个对象被一个或多个引用变量引用时,它就处于可达状态,这个时候系统的垃圾回收机制就不会回收它。
软引用(SoftReference)
通过类SoftReference实现,当系统内存足够的时候,它不会被回收;但是当系统内存不足的时候,回收机制就会将其回收。Android中常用它来优化图片的异步加载。(现在一般使用LruCache,因为android 2.3+(API Level9)之后,SoftReference在内存够用的时候也有可能被提前释放掉)
弱引用(WeakReference)
通过WeakReference类实现,比软引用级别低。不过系统内存是否足够,只要回收机制运行,就会被回收
虚引用(PhantomReference)
对 对象本身没有影响,虚引用要个引用队列一起使用才有意义。当对象被回收时,与其关联的虚引用就会被放到引用队列中,通过在引用队列中查看虚引用可以在对象回收之前采取相应的行动。
举个例子:
public class Reference(){
public static void main(String[] args){
String str = new String("java对象");
//创建一个引用队列
ReferenceQueue rq = new ReferenceQueue();
//创建一个虚引用
PhantomReference pr = new PhantomReference(str,rq);
System.out.println(pr.get());//显示null 因为虚引用实际不会获得对象
//强制回收
System.gc();
System.runFinalization();
//从引用队列中取出最先进入队列的引用也就是pr
System.out.println(rq.poll == pr);
}
}
以上是我对java引用的认识,有不对的欢迎留言指正,又不懂得欢迎交流