[英]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);
我的問題
什么時候會收集someObject?
當無法再訪問someObject
將對其進行GC。 在所提供的簡單示例中,當以下任一情況發生時,可能會發生這種情況:
someObjectList
不再可訪問 someObject
從除去someObjectList
(由此使得不再可達) 我在這里泄漏內存嗎?
據我所知,沒有任何跡象表明您的代碼中存在內存泄漏。
在循環退出之前,不會對someObject
進行GC處理。 這是否是內存泄漏尚待解釋。 如果您希望它在迭代時仍被釋放,則說明您正在泄漏。 如果不是,那么您不是。
someObject
是一個局部變量,永遠不會被垃圾回收。 這個someObject
是堆棧或寄存器中的“某物”。 局部變量本身不是Java對象。
someObject
臨時保存對SomeObject
實例的SomeObject
。 該引用存儲在數組列表內的數組中。
在沒有其他對象持有對該實例的引用之后的一段時間,該SomeObject
實例將被垃圾回收。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.