一、软引用和弱引用的用法

软引用(SoftReference)的含义是,如果一个对象只具有软引用,而当前虚拟机堆内存空间足够,那么垃圾回收器就不会回收它,反之就会回收这些软引用指向的对象。

弱引用(WeakReference)与软引用的区别在于,垃圾回收器一旦发现某块内存上只有弱引用(一定请注意只有弱引用,没强引用),不管当前内存空间是否足够,那么都会回收这块内存。

见如下实例

 public static void main(String[] args) {
        String str = new String("abc");    //强引用
        SoftReference<String> softReference = new SoftReference<>(str); //软引用
        str = null;    //去掉强引用
        System.gc();   //垃圾回收器进行回收
        System.out.println(softReference.get());
        String strNew = new String("123");

        WeakReference<String> weakReference = new WeakReference<>(strNew);//弱引用
        strNew = null;
        System.gc();
        System.out.println(weakReference.get());
    }

运行结果如下图

运行结果正好对应了前面软引用和弱引用的知识点。