java各种引用

来源:互联网 发布:免费建造师做题软件 编辑:程序博客网 时间:2024/06/07 09:18

Java中有四种类型的引用


强引用(String reference)

弱引用(Weak reference)

软引用(Soft reference)

虚引用(Phantom reference)

1.强引用

是编程中使用的最简单的引用,如代码String s = "abc" 中,变量s就是字符串对象“abc”的一个强引用。任何被强引用指向的对象都不能被垃圾回收器 回收,

这些对象是在程序中需要的。

2.弱引用

使用java.lang.ref.WeakReference class 类来表示,可以使用下面的代码创建弱引用:

Counter counter = new Counter(); // strong reference - line 1WeakReference<Counter> weakCounter = new WeakReference<Counter>(counter); //weak referencecounter = null; // now Counter object is eligible for garbage collection

现在只要你给强引用对象counter赋空值null,该对象就可以被垃圾回收器回收。因为该对象此时不再含有其他强引用

如果一个对象只有弱引用指向它,垃圾回收器会立即回收该对象,这是一种急切回收方式。

另一个使用弱引用的例子是WeakHashMap,它是除HashMap和TreeMap之外,Map接口的另一种实现。WeakHashMap有一个特点:map中的键值(keys)都被封装成弱引用,也就是说一旦强引用被删除,WeakHashMap内部的弱引用就无法阻止该对象被垃圾回收器回收。

3.软引用

如果该对象含有软引用,Counter对象不会立即被回收,除非JVM需要内存。Java中的软引用使用java.lang.ref.SoftReference类来表示

Counter prime = new Counter(); // prime holds a strong reference – line 2SoftReference soft = new SoftReference(prime) ; //soft reference variable has SoftReference to Counter Object created at line 2prime = null; // now Counter object is eligible for garbage collection but only be collected when JVM absolutely needs memory
软引用可是很好的实现JVM缓存

4.虚引用

使用java.lang.ref.PhantomReference类来表示。拥有虚引用的对象可以在任何时候被垃圾回收器回收。和弱引用和软引用相似,你可以通过如下代码创建虚引用:

ReferenceQueue refQueue = new ReferenceQueue(); //reference will be stored in this queue for cleanupDigitalCounter digit = new DigitalCounter();PhantomReference<DigitalCounter> phantom = new PhantomReference<DigitalCounter>(digit, refQueue);

一个对象的生命周期可以通过下图进行描述:


0 0
原创粉丝点击