吉良吉影__. 2021-10-14 09:08 采纳率: 0%
浏览 13
已结题

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());

    }
}
 


  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2021-10-18 14:21
    关注

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


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


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

    评论

报告相同问题?

问题事件

  • 系统已结题 10月22日
  • 创建了问题 10月14日

悬赏问题

  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画