请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于ReferenceQueue对列打印问题

老师,下边这个打印为什么我内存够的时候obj是空呢,这个对列什么时候才往队列添加数据呢,为什么内存不足了,软引用被清掉才进来打印?这个很不懂!
private static ReferenceQueue queue = new ReferenceQueue();

private static void printQueue(String str) {
    Reference<? extends User> obj =queue.poll();
    if (obj !=null){
        // 如果经历垃圾回收 没有打印证明,内存不够,软引用被清除掉了;
        // 如果打印了,证明经历GC,但是内存足够,SoftReference没被清除
        System.out.println("---------------------------------the gc Object reference =="+str+" = "+obj.get());
    }
}

正在回答 回答被采纳积分+3

1回答

CC老师 2021-06-16 09:16:29

这个问题,你要理解ReferenceQueue的作用,它是 当一个对象被GC后,相应的reference对象,会放到这个ReferenceQueue里面来。

也就是说,如果没有发生对象的gc,这个队列就是空的。

所以,你的内存够的时候, 这个ReferenceQueue队列里面是没有数据的,从里面poll出来的obj当然是null了


2 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号