4

让我首先澄清这个问题不是什么。这不是对闪存管理或垃圾收集如何工作(引用计数、标记和清除等)的简单解释的请求。也不是要求避免内存泄漏的提示(如回收渲染、弱引用、删除事件侦听器、IDispose 模式、停止计时器、避免静态指针和来自全局对象(如舞台)的指针等)

假设您有一个用 MXML 和 Actionscript 编码的相当大的 Flex 程序,并假设它是由精通上述所有内容的人编写的,并假设它仍然存在内存泄漏。此时就要调试问题了,问题是怎么做。

Flash Builder Premium IDE 可以在时间 A 和时间 B 拍摄内存快照,然后比较这两个快照,然后报告“游荡”对象。要使用它,程序运行到稳定状态(时间 A),然后运行一段时间(时间 B),并且隐含的假设是系统应该包含大致相同的对象 - 如果不是,那么新的正在“游荡”(内存泄漏)。方便的是,IDE 将提供指向每个游荡对象的指针列表。

但是 IDE 似乎没有提供至关重要的信息:哪些指针将对象“锁定”在内存中并防止垃圾收集,而哪些仅仅是来自子对象(循环)的指针,如果对象被收集。虽然 IDE 确实将某些指针标记为“gcroot”,但有趣的是,来自子对象的指针通常(通常!)标记为 gcroot,因此该标志不提供必要的信息。由于一个合理大小的程序可以有很多对象,并且它们可以通过指针连接成一个复杂的图形,因此很难使用 IDE 来查找哪些指针导致了内存泄漏。

因此,我的问题是,关于如何在以 Actionscript 和 MXML 实现的 Flex 程序中查找内存泄漏的原因,是否有人有任何提示(除了上面已经提到的)?

4

2 回答 2

0

看看矿工

它有一个非常全面的工具集,可以从 Flash 播放器内部进行分析和调试。

我以前用它来确定内存泄漏的来源,并清理以后可能导致内存泄漏的东西。

于 2013-11-15T19:25:39.970 回答
0

试试 Monster Debugger:http ://www.monsterdebugger.com/或者有人已经提到过 Adob​​e Scout:https ://www.adobe.com/products/scout.html

或者,您可以创建自己的基本分析器: http ://www.flashandmath.com/howtos/memory/

于 2016-04-26T17:00:29.660 回答