簡體   English   中英

在方法中本地創建的對象的垃圾收集

[英]Garbage collection of objects created locally in a method

我認為如果 object 在一個方法中本地創建並且永遠不會泄漏到外部,那么一旦該方法執行完成,object 將有資格進行垃圾收集。

但我很困惑,因為我讀到有 4 個 GC 根 - 其中一個是線程 object,所以我很困惑,方法局部對象只有在它所在的線程獲得時才有資格進行垃圾收集創建完成,該線程的GC Root被取下?

此外,如果有人可以闡明方法局部對象如何鏈接到堆的堆棧區域。

請注意,我已經閱讀了有關方法局部對象的 GC,但在任何地方都沒有得到明確而詳細的答案,所以我提出了這個問題。

將線程調用堆棧視為堆棧幀節點的雙向鏈表。 每個節點引用給定方法的所有局部變量,這些變量又引用任何活動對象。 線程的 GC root 本質上是鏈表的頭節點,垃圾收集跟蹤仍然鏈接的節點,從而找到所有存活的對象。 當一個方法返回時,鏈表的尾節點被刪除,因此它不再被 GC 發現。

實際上,調用堆棧不是以這種方式實現的,但行為本質上是相同的。

方法本地對象一旦停止使用就符合垃圾回收條件,無論該方法是否已完成。

方法實際上與垃圾收集幾乎沒有任何關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM