2012-07-26 73 views
0

我正試圖調試一個客戶端的問題陣列,這似乎是我們的Web應用程序面臨內存泄漏問題。在記錄一個簡單地瀏覽我們的Web應用程序的宏腳本後,我們發現所有主流瀏覽器隨着時間的推移會消耗越來越多的內存,這會導致閃存和JavaScript等內存問題。Internet Explorer是最大的罪魁禍首,需要一個內存在25分鐘內完成近1.5GB的工作。我們的網絡應用程序大量使用閃光燈,這從我的研究中也是一個大內存泄漏cuprit。說了這麼多,我的問題是內存管理的主要責任是什麼?我知道瀏覽器負責在流程級別釋放和佔用內存,但如果我們觀察到持續使用內存泄漏,我們應該關注什麼來解決這個問題?內存管理的責任在哪裏?

回答

0

有幾件事情需要澄清。如果問題似乎與Flash相關,那麼您是否重新加載了包含Flash小程序的整個頁面,或者是否繼續使用它?

如果您重新加載它 - 問題可能出現在JavaScript端,其中一些對Flash對象的JavaScript引用在查看單個頁面的會話中持續存在(這很少見但並非不可能,在某些時候Skype已知會導致此類問題它們覆蓋了可召回電話號碼的問題,這些問題在ExternalInterface包裝器中造成了一些混亂,並且不僅導致它們本身,而且包含Flash的每個頁面都永遠保留在瀏覽器的內存中)。如果你不重新加載它,應該自己管理它自己的內存,既不是瀏覽器也不是插件包裝器,甚至連播放器都不負責它。但是,Flash使用類似於Java內存管理模式,這意味着它不能在技術上分配在應用程序關閉後不會回收的內存,這意味着如果確保Flash Applet已重新加載,那麼即使Applet本身是泄漏,卸載後,所有使用的內存都應該回收。

通常,AS3使用更高級的編程,與JavaScript相比,它有更多的功能,因此,我將開始尋找那裏的問題(因爲在更復雜的代碼中出現錯誤的可能性更大)。 Flash有幾個可用的內存分析器。在Flash Builder中有一個,FlashDevelop也有一個,也有一個已知的沒有綁定到任何IDE:http://jpauclair.net/2012/07/11/new-tutorial-profiling-memory-with-theminer/ 還有一個稱爲Monocle的項目(以前稱爲遙測),我不確定它是否已經發布,但它是由Adobe在最近一次MAX事件中演示,這是Adobe工程師談論它的其中一個:https://adobechats.adobeconnect.com/_a200985228/p4khwz03sz9/?launcher=false&fcsContent=true&pbMode=normal(更接近演示文稿的中間部分)。

至於JavaScript,這是我前段時間遇到的:https://wiki.mozilla.org/Performance%3aLeak_Tools來自Mozilla的推薦。不過,我還記得需要從源代碼構建Mozilla瀏覽器以啓用內存分析(如果需要,您需要設置一些與分析器輸出相關的變量)。 Chrome上的相似信息如下:http://zetafleet.com/blog/google-chromes-heap-profiler-and-memory-timeline。也許,Visual Studio中有一些工具可以在IE中對JavaScript進行剖析 - 我不知道。