2013-08-05 64 views
3

所以我得到這個主幹應用我試圖調試,Chrome時間軸工具不可靠?

我讓時間軸記錄,應用程序正在使用越來越多的內存,但如果我去到的個人資料,並採取堆快照,我總是得到相同的數字(6mb)就好像我的應用沒有泄漏一樣。

另外,當我拍攝快照時,時間線實際上回到6mb。我不知道該怎麼做這種行爲。

回答

4

一切都很好,你的應用程序可能不會泄漏任何內存。你感到困惑的是garbage collector(GC)。

GC是一種「試圖回收垃圾或由程序不再使用的對象佔用的內存」的機制。在時間線上看到內存不斷增加並不一定意味着應用程序正在泄漏內存。這意味着垃圾正在內存中積累,但您的瀏覽器(更確切地說 - JavaScript引擎)知道它,並在Chrome決定是時候執行該操作時將其刪除(您可以閱讀更多關於它的文檔here)。嘗試單擊「收集垃圾」按鈕("Collect Garbage" Chrome DevTools button),它會強制垃圾收集,並且您會注意到時間線上的立即放下。

重新開始製作快照以及總是最終獲得6MB的原因。創建堆快照時發生的第一件事是......垃圾回收。這是因爲DevTools不希望用不再使用的東西來遮蓋快照,應該刪除它。

我強烈建議您閱讀official docs about heap profiling

+0

非常感謝!我對垃圾收集器有點不高興,它讓內存大量增加(對於6和18mb之間的移動應用程序很有用) –

+0

@CedricDugas您需要了解垃圾收集需要相當多的時間並暫停所有JavaScript執行。因此,Chrome根據需要面臨着艱鉅的任務,即儘可能多地運行GC,但也試圖避免GC使應用程序無響應的情況(這就是爲什麼當GC未被使用時,例如當您更改標籤或縮小瀏覽器)。無論如何,你仍然可以通過不經常分配新內存來改善你的應用程序(例如通過重用對象)。這將減少內存使用增長,並因此需要頻繁的GC調用。 –

相關問題