簡體   English   中英

何時將添加到循環中的集合中的對象進行垃圾收集?

[英]When will Objects added to a Collection in a loop be Garbage Collected?

在下面的代碼中

List<SomeObject> someObjectList = new ArrayList<SomeObject>();

do {

    SomeObject someObject = new SomeObject();

    someObjectList.add(someObject);

} while(some condition is met);

我的問題

  1. 什么時候會收集someObject?
  2. 我在這里泄漏內存嗎?

什么時候會收集someObject?

當無法再訪問someObject將對其進行GC。 在所提供的簡單示例中,當以下任一情況發生時,可能會發生這種情況:

  • someObjectList不再可訪問
  • someObject從除去someObjectList (由此使得不再可達)

我在這里泄漏內存嗎?

據我所知,沒有任何跡象表明您的代碼中存在內存泄漏。

在循環退出之前,不會對someObject進行GC處理。 這是否是內存泄漏尚待解釋。 如果您希望它在迭代時仍被釋放,則說明您正在泄漏。 如果不是,那么您不是。

someObject是一個局部變量,永遠不會被垃圾回收。 這個someObject是堆棧或寄存器中的“某物”。 局部變量本身不是Java對象。

someObject臨時保存對SomeObject實例的SomeObject 該引用存儲在數組列表內的數組中。

在沒有其他對象持有對該實例的引用之后的一段時間,該SomeObject實例將被垃圾回收。

暫無
暫無

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

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