美文网首页
WeakReference弱引用

WeakReference弱引用

作者: 呆呆猿 | 来源:发表于2020-05-23 21:31 被阅读0次

    只有在

    WeakReference weakReferencen=new WeakReference<>(new int[1024*1024]);

    入参里定义才算弱引用。

    如果是

    int[] i=new int[1024*1024];

    WeakReference weakReferencen=new WeakReference<>(i);

    始终不会被回收。应为i是强引用。(为什么百度上的都说weakReferencen.get()可能返回空?难道jdk版本不对??????????????)

    正确的做法是将i设置成null后,weakReferencen.get()才有可能是null

    14行返回了0,说明weakReferencen.get()不等于null,弱引用数据不一致。

    14行报了空指针,说明weakReferencen.get() ==null

    在第一次和第二次之间进行了垃圾回收,所以第二次获取就肯定为空了

    ()

    例子:

    VM-option:-Xms20M -Xmx20M

    package com.example.test.threadLocal;

    import java.lang.ref.WeakReference;

    import java.util.stream.IntStream;

    public class Test2 {

    public static void main(String[] args)throws InterruptedException {

    IntStream.range(1,100).forEach((is)->{

    new Thread(()->{

    //                int[] i=new int[1024*1024];

                    WeakReference weakReferencen=new WeakReference<>(new int[1024*1024]);

                    int[] j =new int[1024];

                    try {

    Thread.sleep(100);

                    }catch (InterruptedException e) {

    e.printStackTrace();

                    }

    int[] l =new int[1024];

                    System.gc();

                    System.out.println("若引用的值:"+weakReferencen.get()[0]);

                }).start();

            });

        }

    }

    相关文章

      网友评论

          本文标题:WeakReference弱引用

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