Java四大引用

四大引用分别是:强引用、软引用、弱引用、虚引用。

Java划分引用的目的:

  • 让程序员通过代码的方式决定某些对象的生命周期。
  • 有利于JVM进行垃圾回收。

1.强引用

Java默认声明采用的是强引用,只要强引用存在就不会被垃圾回收器回收,当内存不住时会抛OutOfMemoryError异常。断开强引用与对象之间的联系,可以显示的将强引用赋值为null,JVM在适时会回收对象。

2.软引用

软引用是用来声明非必要或临时对象的,只有在内存不足时会被回收。

使用:

ReferenceQueue queue = new ReferenceQueue(); 
SoftReference reference = new SoftReference(new String("hello"), queue);
System.out.println(reference.get());

3.弱引用

弱引用的引用强度比软引用还要更弱一些,无论内存是否足够,只要JVM开始进行垃圾回收,那些被弱引用关联的对象都会被回收。

使用:

ReferenceQueue queue = new ReferenceQueue(); 
WeakReference reference = new WeakReference(new String("hello"), queue);
System.out.println(reference.get());

4.虚引用

虚引用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收。

使用:

ReferenceQueue queue = new ReferenceQueue(); 
PhantomReference reference = new PhantomReference(new String("hello"), queue);
System.out.println(reference.get());

5.总结

引用强度:强->软->弱->虚

引用类型回收条件生存时间用途
强引用不会回收程序运行生命周期对象一般状态
软引用内存不足时内存不足时回收对象缓存
弱引用垃圾回收时执行垃圾回收时回收对象缓存
虚引用随时未知-
如果觉得我的文章对你有用,请随意赞赏