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

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

java 中的所有軟引用都會一次性清除嗎?

java 中的所有軟引用都會一次性清除嗎?

守候你守候我 2021-07-09 17:00:25
我讀了這篇文章,現在我很清楚弱引用和軟引用之間的基本區別是什么。我也明白,與弱引用不同(如果沒有對該對象的強引用,這將導致在下一個 GC 周期中收集該對象),軟引用會保留在內存中,直到 JVM 內存不足。但是我的問題是如果 JVM 內存不足并且垃圾收集器也開始收集軟引用,它應該在邏輯上收集所有具有軟引用的現有對象(我的猜測)。我是對的嗎?我想到的另一件事是軟引用有一個很好的用例,那就是內存緩存。但是如果我擁有的所有軟引用都將被 GC 一次性清除,那么這可能不是我們一直想要的。有沒有辦法控制將被清除的軟引用的百分比?或者我們可以告訴 GC 在它恢復了一定數量的內存后停止清除軟引用嗎?我問這個是為了更好地掌握如何有效地使用軟引用,顯然沒有人會希望他們的緩存從內存中完全清除,即使您需要非常少量的內存。
查看完整描述

1 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

這里有更多非正式的答案:

首先,立即收集所有軟引用不是合乎邏輯的。從理論上講,JVM 可以(另外)跟蹤上次使用情況或某個使用情況計數器。并基于此做出決定(首先只清除“較舊”或“較少使用”的軟引用)?;蛘咚ㄟ^引用“鏈接”到的實際內存量來對軟引用進行排序。

除此之外,JVM 可能會在固定的內存增量上運行。意思是:當您只需要/想要 50 MB 時,為什么要丟棄 500 MB 內存的軟引用?!

換句話說:清除所有軟引用是“最容易實現”的簡單策略,但不是唯一的選擇。JVM 可以自由地實施各種策略。例如,試圖刪除盡可能少的軟引用,以便專門支持內存緩存!

因此,除非其他答案可以顯示 JLS 部分明確指出它們應該一次性全部清除,否則您不應該根據您對合乎邏輯的“感知”得出結論。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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