强引用,软引用,弱引用

Posted Fly博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了强引用,软引用,弱引用相关的知识,希望对你有一定的参考价值。

/**
 * 强引用
 * 强引用设置为空,对象立马会被回收
 **/
public class NormalReference {

    public static void main(String[] args) {
        M m=new M();
        m=null;
        System.gc();
    }
}
class M{
    @Override
    public void finalize() throws Throwable {
        System.out.println("finalize");
    }
}


/**
 * 软引用
 * 软引用当引用存在的时候,只有当内存不足的时候才去回收
 **/
public class T0_SoftReference {

    public static void main(String[] args) {

        SoftReference<byte[]> m=new SoftReference<>(new byte[1024*1024*10]);
        System.out.println(m.get());
        System.gc();

        try{
            TimeUnit.SECONDS.sleep(1);
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println(m.get());

        //再重新分配一个数组,heap将装不下,这个时候系统会垃圾回收,先回收一次,如果不够,才把软引用干掉
        byte[] b=new byte[1024*1024*15];
        System.out.println(m.get());
    }
}


/**
 * 弱引用 只要碰到垃圾回收器回收就立即被回收
 *  ThreadLocal里面就用到了弱引用,防止内存泄漏
 **/
public class T0_WeakReference {

    public static void main(String[] args) {
        WeakReference<M> m=new WeakReference<>(new M());
        System.out.println(m.get());
        System.gc();
        System.out.println(m.get());
    }
}

 

以上是关于强引用,软引用,弱引用的主要内容,如果未能解决你的问题,请参考以下文章

Java四种引用 强引用,软引用,弱引用,虚引用(转)

Java四大引用详解:强引用软引用弱引用虚引用

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

强引用软引用弱引用虚引用以及他们之间和 gc 的关系

4中引用(强,软,弱,虚)侧重弱引用

java强引用 软引用 弱引用 虚引用