我有兩個組件:ComponentList 和 ComponentDetail。它現在的作業方式是,用戶將從串列中選擇一個,然后將其重定向到呼叫 API 的 ComponentDetail 并為可觀察物件獲取大資料集。現在,我遇到的問題是,當我回到 ComponentList 時,ComponentDetail 使用的記憶體沒有在 onDestroy 上被垃圾收集。它在 10 分鐘后關閉,但如果從 devtools 強制 GC,它將快速釋放記憶體空間。我不確定是什么導致它需要很長時間才能自動收集,我可以做些什么來使垃圾收集在 ngOnDestroy 之后立即發生?
我也在使用延遲加載,所以我不確定這是否會影響它。
uj5u.com熱心網友回復:
(此處為 V8 開發人員。)
只是為了確認評論者所說的話:沒有辦法強制立即進行垃圾收集,您不必擔心。當您的應用程式使物件符合垃圾收集條件(通過洗掉對它的所有參考)時,垃圾收集器將在下次運行時釋放它,這可能很快,也可能需要一段時間。原因很簡單,查找死物件是一項昂貴的操作,因此 V8(當然,其他 JS 引擎也是如此)非常仔細地調整以在合理快速地釋放記憶體之間找到良好的平衡(尤其是在記憶體壓力較大的情況下)并且不會在這樣做上花費太多 CPU 時間。
在手頭的情況下,當您分配單個大物件(或一組物件),然后洗掉對它的所有參考,然后等待,下一個 GC 周期將需要一段時間才能啟動,這并不奇怪在; 而如果你繼續分配大物件,那么所有這些分配活動都將強烈暗示 GC 開始尋找可以釋放的垃圾。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/338532.html
標籤:javascript 有角的 v8
