java软引用及队列问题 12

  1. 此程序t1线程未检查到 软引用进入引用队列
package du.zhen.proptype.T3;

import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Test5 {
    @Override
    protected void finalize() throws Throwable {
        System.out.println(this.hashCode()+"即将被回收..");
    }

    @Override
    public String toString() {
        return this.hashCode()+"";
    }

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

        //WeakReference a  = new WeakReference(new Date());



        ReferenceQueue queue = new ReferenceQueue();

        Thread t1 = new Thread(()->{
            try {
                System.out.println("监听开始。。。");
                while (true){
                    Reference remove = queue.remove();
                    if (remove!=null)
                    System.out.println(remove.get()+"==========队列========"+remove.hashCode());
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        t1.start();

        // 软引用 垃圾回收时被加入队列中
        SoftReference a1 = new SoftReference(new Test5(), queue);
        SoftReference a2 = new SoftReference(new Test5(), queue);
        SoftReference a3 = new SoftReference(new Test5(), queue);
        SoftReference a4 = new SoftReference(new Test5(), queue);
        SoftReference a5 = new SoftReference(new Test5(), queue);



        // 制造内存溢出 OOM
        List list = new ArrayList();
            try {
                while (true){
                    list.add(new Date());
                }
            } catch (Throwable e) {
                e.printStackTrace();
            }
      
    }
}
 


  1. 此程序t1线程检查到 软引用进入引用队列
package du.zhen.proptype.T3;

import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Test5 {
    @Override
    protected void finalize() throws Throwable {
        System.out.println(this.hashCode()+"即将被回收..");
    }

    @Override
    public String toString() {
        return this.hashCode()+"";
    }

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

        //WeakReference a  = new WeakReference(new Date());



        ReferenceQueue queue = new ReferenceQueue();

        Thread t1 = new Thread(()->{
            try {
                System.out.println("监听开始。。。");
                while (true){
                    Reference remove = queue.remove();
                    if (remove!=null)
                    System.out.println(remove.get()+"==========队列========"+remove.hashCode());
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        t1.start();

        // 软引用 垃圾回收时被加入队列中
        SoftReference a1 = new SoftReference(new Test5(), queue);
        SoftReference a2 = new SoftReference(new Test5(), queue);
        SoftReference a3 = new SoftReference(new Test5(), queue);
        SoftReference a4 = new SoftReference(new Test5(), queue);
        SoftReference a5 = new SoftReference(new Test5(), queue);



        // 制造内存溢出 OOM
        List list = new ArrayList();
            try {
                while (true){
                    list.add(new Date());
                }
            } catch (Throwable e) {
                e.printStackTrace();
            }

       //相较于前一段程序 只添加了这里的输出语句
        System.out.println("验证 "+a1.get()+" "+a1.hashCode());
        System.out.println("验证 "+a2.get()+" "+a2.hashCode());
        System.out.println("验证 "+a3.get()+" "+a3.hashCode());
        System.out.println("验证 "+a4.get()+" "+a4.hashCode());
        System.out.println("验证 "+a5.get()+" "+a5.hashCode());

    }
}
 


你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。