[英]Will my objects be garbage collected?
這是數據提供者:
class Item {
private String text;
public Item(String txt) {
this.text = txt;
}
public String get() {
return this.text;
}
public static Item next() {
return new Item("hello");
}
}
現在,我正在嘗試執行此操作(僅作為示例,以了解其工作原理):
List<String> texts = new LinkedList<>();
for (int i = 0; i < 10000; ++i) {
Item item = Item.next();
texts.add(item.get());
}
// do we still have ten thousand Items in memory,
// or they should already be garbage collected?
我想知道GC是否會銷毀所有Item
對象,或者它們會保留在內存中,因為我的List
包含10000個鏈接到它們的部件( text
)?
由於您不保留對Item
對象的引用,而僅保留對字符串的引用,因此Item
對象可以用於GC。 字符串不是,因為它們被引用。
在循環的第一次迭代之后,您將獲得:
+------+ | item | +------+ | text |----+ +------+ | +---------+ +-> | "Hello" | | +---------+ +-------+ | | texts | | +-------+ | | 0 |---+ +-------+
因此, item
和texts
指向字符串,但是沒有東西指向item
,因此可以對Item
進行GC處理。
稍微偏離主題:
如圖所示,您的示例將只有一個String
實例,該實例在列表中被引用了10,000次,因為它是一個字符串文字,並且字符串文字是自動intern
的。 但是,如果在每種情況下都是不同的字符串,答案將不會改變。 字符串與Item
分開。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.