如果我有一個(或多個)CompletableFuture尚未開始,并且在該方法上有一些thenApplyAsync(),anyOf()-methods。
垃圾收集器會清除所有這些嗎?
如果該鏈的末尾有一個join()/ get()-> 同樣的問題:垃圾收集器會洗掉所有這些嗎?
也許我們需要有關 join() 背景關系的更多資訊。
該連接在 Thread 的最后一個命令中,并且沒有副作用。那么在這種情況下執行緒仍然處于活動狀態嗎?- 是否收集了 Java 執行緒垃圾
無論如何,這是一個好主意,將毒丸推下鏈,如果我確定(也許是在 try-catch-finally 中),我不會啟動該 Completable-chain,還是沒有必要?
問題是因為這樣的事情嗎?( https://bugs.openjdk.java.net/browse/JDK-8160402 )
與之相關的一些問題:執行緒執行器何時發出信號以發出新任務?我想,什么時候CompletableFuture去下一個鏈接CompletableFuture?。所以我必須只進行記憶體泄漏而不是執行緒泄漏?
編輯:我對未啟動的 CompletableFuture 的意思是什么?
我的意思是一個 varnotStartedCompletableFuture = new CompletableFuture<Object>();而不是一個CompletableFuture.supplyAsync(....);
我可以以這種方式啟動 notStartedCompletableFuture:
notStartedCompletableFuture.complete(new Object);稍后在程式流中或從另一個執行緒。
uj5u.com熱心網友回復:
如果一個執行緒呼叫join()或get()上一個CompletableFuture永遠不會完成,它會永遠保持阻塞(除非它被中斷),抱著未來的參考。
如果該未來是后代未來鏈( 任務和執行程式)的根,它還將保留對這些的參考,這些參考也將保留在記憶體中(以及所有可傳遞參考的物件)。
當通過方法創建時,future 通常不保存對其“父級”的參考then*(),因此如果沒有其他參考,它們通常應該被垃圾收集 - 但要注意那些,例如呼叫執行緒中的區域變數,參考到List<CompletableFuture<?>>在后的λ使用allOf()等
uj5u.com熱心網友回復:
您似乎正在為CompletableFuture可能泄漏的不同方式而苦苦掙扎,這取決于您創建它的方式。但它的創建方式、地點、時間或原因并不重要。唯一重要的是它是否仍然可達。
垃圾收集器會清除所有這些嗎?
有兩個地方我們希望有對 a 的參考CompletableFuture:
- 在
Runnable(或其他)將完成未來。 - 在任何其他代碼中(在某些時候)嘗試從未來獲取最終值。
如果您有電話thenApplyAsync(),anyOf()則參考 Runnable位于該電話的引數中。如果呼叫仍然可以發生,那么對 的參考Runnable必須仍然可以訪問。
在你的例子中:
var notStartedCompletableFuture = new CompletableFuture<Object>();
如果notStartedCompletableFuture某些仍在執行的代碼仍然可以訪問該變數,則該變數是可CompletableFuture訪問的并且不會被垃圾收集。
另一方面,如果notStartedCompletableFuture不再可訪問,并且如果未來無法通過其他路徑到達,那么它將根本無法訪問……并且將成為垃圾收集的候選物件。
執行緒執行器何時發出信號以安排新任務?
這取決于您所說的“時間表”是什么意思。如果您的意思是,何時提交任務,則答案是何時submit被呼叫。如果你的意思是,它什么時候真正運行......好吧,它進入佇列,當它到達佇列的頭部并且作業執行緒可以自由執行它時它會運行。
在的情況下thenApplyAsync()和all_of(),任務被提交(即,submit(...)發生呼叫)時的各方法呼叫發生。因此,例如,如果thenApplyAsync在上一次呼叫的結果上呼叫,則該呼叫必須首先回傳。
這都是 Java 運算式求值的基本屬性的結果……應用于您用來構建階段鏈的運算式。
通常,您不需要try / finally或嘗試使用資源來清理潛在的記憶體泄漏。
您需要做的就是確保不會在變數、資料結構等中保留對各種期貨、階段等的參考,這些變數、資料結構等在計算生命周期后仍可訪問/可達。如果你這樣做......這些參考很可能是泄漏的來源。
執行緒泄漏不應該是您的問題。如果您的代碼未明確創建執行緒,則它們由執行程式服務/池管理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/361838.html
