我有一個類,它看起來是這樣的:列表中的對象是否會被垃圾收集?
public class MyClass() {
private List<Thread> threads = new ArrayList<>();
...
public MyClass() {
for (int i = 0; i < 10 ; i++) {
Thread t = new Thread();
threads.add(t);
t.start();
}
}
}
在我的服務,有可能徘徊於該服務運行期間的MyClass
一個實例。通過JConsole,我觀察到10個線程被創建並開始處理,所以我知道這個設置在某種程度上是有效的。
當系統負載不足時,我的問題就出現了。當我向服務發送數千個大對象時,上面的線程自然死亡。 (正如我在JConsole中觀察到的那樣)。由於沒有爲實際拆除線程和/或清除列表而定義的邏輯,因此我想知道Java是否有可能從垃圾收集threads
列表中的實際對象並只是背後留下某種弱點。
問題:
在高負載下,是有可能,Java垃圾收集
threads
列表的內容?有沒有另一種方式,
threads
名單的內容可以自發地消失?例如。線程可以以某種方式停止,而不需要任何明確的代碼調用某種清理邏輯。
(是的,我知道這是設計不良的代碼,但它是舊的代碼,我只是想弄清楚什麼是目前發生的事情之前,我去嘗試並解決落實。)
您是否問是否垃圾收集後的過程完成,或過程中/之前?如果第一個,那麼是的,否則不。 –
@TheLostMind我已經修復了代碼。實際上它創建了這些奇怪的對象,每個對象都包含一個線程,然後在調用'run()'方法時啓動它。我試圖通過直接使用線程列表來簡化代碼示例,但顯然錯過了一個地方。 –
「List」中的條目是否被清除,或者這些'Thread'對象表示的線程是否停止?請注意,正在運行的線程無法啓動GC。 –