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

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

GC 是否足夠智能以刪除被引用但不再使用的對象?

GC 是否足夠智能以刪除被引用但不再使用的對象?

慕勒3428872 2021-06-11 19:08:28
假設我有一個名為“master”的對象,它分別擁有 100 個名為“slave0”到“slave99”的對象。(這不是一個數組。我的“主”類中有 100 個字段,分別稱為 salve0 到 slave99。)現在,假設我的程序首先讀入一個包含“主”對象的序列化存儲版本的文件。但是,假設我的程序從不使用對象 slave50 到 slave99。會發生什么?(我的猜測是,作為讀取/反序列化過程的一部分,java 程序將首先讀取所有 100 個從屬對象,并且只有在讀入所有 100 個從屬對象后,它可能會選擇執行 GC,此時對象 slave50 到 slave99 將被 GC 刪除并回收內存。這是正確的嗎?注意:對象“master”仍在使用中,因此從技術上講,對象 slave50 到 slave99 仍在被父對象 master 引用,并且父對象 master 仍在積極使用中。)后續問題因此,假設我上面關于 GC 工作原理的猜測是正確的;如果我的長時間運行的程序花了幾分鐘時間處理對象 slave0 到 slave50,然后進入另一個名為“X”的最終(長時間運行)過程,該過程只處理對象 slave0 到 slave25。GC 會不會意識到即使對象 slave25 到 slave50 仍然被父對象 master 引用,并且即使對象 master 仍在使用,GC 仍然足夠聰明以擺脫對象 slave25 到 slave50,因為沒有人是否會從“程序 X”開始使用它?
查看完整描述

2 回答

?
慕少森

TA貢獻2019條經驗 獲得超9個贊

在 Java 中,GC 不會刪除活動對象。在查看跟蹤 GC 邏輯時,當一個對象可從活動線程訪問時,它被認為是活動的(除非我們正在考慮更奇特的引用類型,例如WeakReference)。在您的簡單示例中,master對象中的所有字段都是可訪問的,因為master對象本身可從main線程訪問。

查看完整回答
反對 回復 2021-06-23
  • 2 回答
  • 0 關注
  • 244 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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