内存管理的职责在于Web应用程序?

时间:2012-07-26 16:06:18

标签: flash internet-explorer memory browser memory-leaks

我正在尝试使用我们的Web应用程序面临内存泄漏问题的客户端调试一系列问题。在录制了一个简单地反复浏览我们的Web应用程序的宏脚本之后,我们发现所有主流浏览器都会随着时间的推移消耗越来越多的内存,这会导致闪存和javascript等许多内存不足问题.Internet explorer是需要内存的最大罪魁祸首在25分钟内提交近1.5 gb。我们的网络应用程序大量使用闪存,从我的研究也是一个很大的内存泄漏奖杯。说完这一切之后,我的问题是主要负责内存管理的问题是什么?我知道浏览器负责在进程级别释放和占用内存,但是如果我们通过持续使用来观察内存泄漏,我们应该关注什么来解决这个问题呢?

1 个答案:

答案 0 :(得分:0)

您需要澄清一些事情。如果问题似乎与Flash有关,您是否重新加载包含Flash小程序的整个页面,或者您是否连续使用它?

如果你重新加载它 - 问题可能出在JavaScript方面,其中一些JavaScript对Flash对象的引用持续存在于查看单个页面的会话上(这种情况很少见但并非不可能,在某些时候Skype已知会导致此类问题用于可调用电话号码的叠加层,这些字符串在ExternalInterface包装器中搞砸了,不仅造成了它们自己,而且每个包含Flash的页面都永远保留在浏览器的内存中。)

Flash applet,如果你不重新加载它,应该管理它自己的内存,浏览器和插件包装器,甚至玩家都不负责它。但是,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的项目(曾经是Telemetry),我不确定它是否已经发布,但Adobe在最后一次MAX事件中证明了这一点,这是Adobe工程师之一谈论它:{{3} (更多的是在演示文稿的中间)。

至于JavaScript,这是我前一段时间遇到过的事情:https://adobechats.adobeconnect.com/_a200985228/p4khwz03sz9/?launcher=false&fcsContent=true&pbMode=normal来自Mozilla的建议。但是,我还记得需要从源代码构建Mozilla浏览器以启用内存分析(如果你这样做,你需要设置一些与分析器输出相关的变量)。以下是Chrome上的类似信息:https://wiki.mozilla.org/Performance%3aLeak_Tools。也许,Visual Studio中有一些工具可以在IE中分析JavaScript - 我不知道。