美文网首页
JAVA的引用类型

JAVA的引用类型

作者: 今天也要努力呀y | 来源:发表于2019-11-01 20:52 被阅读0次

    分四种:
    强引用
    软引用
    弱引用
    虚引用

    package Android;
    
    import java.lang.ref.PhantomReference;
    import java.lang.ref.SoftReference;
    import java.lang.ref.WeakReference;
    
    //Java的引用类型
    //强引用:
    //用等号建立起来,左边存在栈里,右边存在堆里
    //软引用 SoftReference
    public class Test {
        public static void main(String[] args) {
            //强应用
    //        String str = "abc";//常量池
            //在堆内存中创建了String对象,在常量池中创建了abc对象
    
            String str = new String("abc");
            //创建一个软引用,引用str
            SoftReference<String> srf = new SoftReference<>(str);
            //创建一个弱引用,引用到str
            WeakReference<String> wrf = new WeakReference<>(str);
            //虚引用,不讲
            //PhantomReference
    
            //对象的可及性
            //对于abc来说,又最强的来决定,所以现在是强引用
            //强可及,永远不会被gc回收
            //软可及,内存不足时,会被gc回收
            //弱可及,gc发现就会回收
    
            str = null;//把强引用断开
            String sfrs = srf.get();
            String wfrs = wrf.get();
    
            System.out.println(sfrs);
            System.out.println(wfrs);
            //把软引用干掉
            srf.clear();
            sfrs = srf.get();
            wfrs = wrf.get();
            System.out.println(sfrs);
            System.out.println(wfrs);
    
            wfrs = null;
            System.gc();//垃圾回收器启动,回收堆内存
            sfrs = srf.get();
            wfrs = wrf.get();
            System.out.println(sfrs);
            System.out.println(wfrs);
        }
    }
    
    

    运行结果:
    abc
    abc
    null
    abc
    null
    null

    如果不加这句(似乎是加了才会成为弱引用对象,这点有点不懂)
    wfrs = null;
    运行结果:
    abc
    abc
    null
    abc
    null
    abc

    相关文章

      网友评论

          本文标题:JAVA的引用类型

          本文链接:https://www.haomeiwen.com/subject/gbmqbctx.html