簡體   English   中英

從 Electron (Chrome / nodejs) 中的 Javascript 進行完整的垃圾回收

[英]Doing a full garbage collection from Javascript in Electron (Chrome / nodejs)

我正在使用 Threejs 在 Javascript 中開發體素引擎,並且遇到了一些 memory 使用問題。 預期的環境位於 Electron 應用程序中,這意味着我可以使用啟用 gc() 手動垃圾收集的標志 ( --expose-gc ) 啟動程序。

我注意到在運行 gc() function 時,與單擊 Chrome 開發人員工具的 Z4789F23283B3A61F858B641A1BEF193 部分的“收集垃圾”按鈕時相比,釋放的 memory 少得多。 例如,如果程序最初使用了 2000 MB 的 memory,在 gc() 之后它最多可以釋放 300 MB,但在單擊上述按鈕后,它會多釋放 600 MB,大約是原來的一半.

經過一番挖掘,我還發現了--gc-global標志。 這將是完美的,因為它的行為方式與手動 gc 相同,但它每秒運行多次,使我的程序非常滯后。 我嘗試使用--gc-interval控制 gc 速率,但它根本不影響它。

我還找到了這個關於ProfilerAgent.collectGarbage();的答案。 ,但它總是拋出一個參考錯誤。 此外,Chrome 無法識別它提供的標志( --debug-devtools-frontend )。 那個,以及我在答案之外找不到關於它的信息的事實,讓我相信它是一個過時的功能。

我還從開發人員工具中分析了 memory 的使用情況,令人驚訝的是,它與任務管理器顯示的值相比要低得多:它似乎不受泄漏的 memory 的影響。 這使得幾乎不可能確定 memory 可能從哪里泄漏。

我還應該明確一點,雖然 Chrome 自己會進行垃圾收集,但它太少見了,而且它很少進行完整的 gc,這意味着 memory 的使用量大約是它可能的兩倍。

總之,有沒有辦法從 Chrome 或 nodejs/Electron 觸發完整的垃圾收集? 顯然,我不關心跨瀏覽器支持,所以任何建議都將不勝感激。

事實證明, self.gc只在調用它的線程/worker 中收集垃圾。 在我的所有工作人員中運行 function 釋放了與開發工具垃圾收集器一樣多的 memory。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM