Java强引用、软引用、弱引用、虚引用

强、软、弱、虚

1、强引用(StrongReference)

强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。比如:

Object o=new Object();   //  强引用

当内存空间不足,会抛出OutOfMemoryError错误。

如果想要释放,则使用o=null;(何时回收取决于垃圾收集器)

o=null;     // 帮助垃圾收集器回收此对象

 

2、软引用(SoftReference)

内存足够时,不会回收该对象,只有在内存不足的时候JVM才会回收该对象。

作用:软引用主要用来做缓存。

String str=new String("abc"); // 强引用
SoftReference<String> softRef=new SoftReference<String>(str); // 软引用

If(JVM.内存不足()) {
str = null; // 转换为软引用
System.gc(); // 垃圾回收器进行回收
}

3.弱引用(WeakReference)

当垃圾收集器工作时,无论是否内存足够,都会回收该对象。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

String str=new String("abc");
WeakReference<String> abcWeakRef = new WeakReference<String>(str);
If(垃圾收集器扫描到) {
str = null;
System.gc(); // 垃圾回收器进行回收
}

4、虚引用(PhantomReference)

如果一个对象仅持有虚引用,在任何时候都可能被垃圾回收器回收。

虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中。

主要作用:当对象被回收时,可以收到一个系统通知。

原文地址:https://blog.csdn.net/mazhimazh/article/details/19752475

发表评论

邮箱地址不会被公开。 必填项已用*标注