亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 有一些混淆OutOfMemoryError。StackOverFlowErrorOutOfMemoryError錯誤是不同的。StackOverFlowError當調用堆棧中沒有空間OutOfMemoryError時發生:當 JVM 無法在堆空間中為新對象分配內存時發生。您的代碼導致 StackOverflow:這意味著堆棧內存已滿,而不是堆空間。我相信會有足夠的空間來存儲你SoftReference的,這就是它不 GCd 對象的原因。



查看完整回答
反對 回復 2022-07-06
  • 1 回答
  • 0 關注
  • 101 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號