WeakReference弱引用

2020-05-23  本文已影响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();

        });

    }

}

上一篇下一篇

猜你喜欢

热点阅读