为了账号安全,请及时绑定邮箱和手机立即绑定

Java GC 未清除 SoftReference

Java GC 未清除 SoftReference

萧十郎 2022-07-06 15:57:59
我试图理解Java 中的SoftReferences,它基本上确保在抛出StackOverflowError之前清除 SoftReferenced 对象的内存。public class Temp {    public static void main(String args[])    {        Temp temp2 = new Temp();        SoftReference<Temp> sr=new SoftReference<Temp>(temp2);        temp2=null;        Temp temp=new Temp();        temp.infinite(sr);    }    public void infinite(SoftReference sr)    {        try        {            infinite(sr);        }        catch(StackOverflowError ex)        {            System.out.println(sr.get());            System.out.println(sr.isEnqueued());        }    }}然而上面的结果是test.Temp@7852e922false有人能解释一下为什么对象没有被 GC 清除吗?我怎样才能让它工作?
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

看起来你可能对StackOverFlowErrorand 有一些混淆OutOfMemoryErrorStackOverFlowErrorOutOfMemoryError错误是不同的。StackOverFlowError当调用堆栈中没有空间OutOfMemoryError时发生:当 JVM 无法在堆空间中为新对象分配内存时发生。您的代码导致 StackOverflow:这意味着堆栈内存已满,而不是堆空间。我相信会有足够的空间来存储你SoftReference的,这就是它不 GCd 对象的原因。



查看完整回答
反对 回复 2022-07-06
  • 1 回答
  • 0 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信