强引用,软引用,弱引用,虚引用

2020-12-28  本文已影响0人  得力小泡泡

背景:我们希望能描述这样一类对象:当内存空间还足够时,则能保留在内存中;如果内存空间在进行垃圾回收集后还是很紧张,则可以抛弃这些对象

1、强引用 --- 不回收

最常见的引用类型是强引用(普通系统99%以上都是强引用),默认的引用类型。强引用的对象是可达的,垃圾收集器永远不会回收掉被引用的对象。强引用是造成Java内存泄露的主要原因

public class StrongReferenceTest {
    public static void main(String[] args) {
        StringBuffer str = new StringBuffer("Hello, 尚硅谷");
        StringBuffer str1 = str;
        
        str = null;
        System.gc();
        
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
          e.printStackTrace();  
        }

        System.out.println(str1);
    }
}

2、软引用 --- 内存不足则回收

在JDK 1.2版之后提供了java.lang.ref.SoftReference类来实现软引用

Object obj = new Object();//声明强引用

SoftReference<Object> sr = new SoftReference<Object>(obj);

obj = null;//销毁强引用

3、弱引用 --- 发现则回收

在JDK 1.2版之后提供了java.lang.ref.WeakReference类来实现弱引用

Object obj = new Object();//声明强引用

WeakReference<Object> wr = new WeakReference<Object>(obj);

obj = null;//销毁强引用

4、虚引用 --- 对象回收跟踪

在JDK 1.2版之后提供了java.lang.ref.PhantomReference类来实现虚引用

Object obj = new Object();//声明强引用
    
ReferenceQueue phantomQueue = new ReferenceQueue();

PhantomReference<Object> sr = new PhantomReference<Object>(obj, phantomQueue);

obj = null;//销毁强引
上一篇 下一篇

猜你喜欢

热点阅读