我正在制作一个明显的内存泄漏的Flash游戏。我做了我应该用GC做的事情;删除对该对象的所有引用,使其无效,删除所有侦听器(或使用弱侦听器);但泄漏仍然存在。
我偶然发现了这篇文章: http://www.andymoore.ca/2010/03/motherfucking-as3-garbage-collection/
它声称太大的对象永远不会被垃圾收集。这个理论很适合我的项目,因为我的所有游戏都存在于经常被创建和销毁的几个巨大的MovieClip中。
声称太大的物体永远不会被垃圾收集是否有任何优点?
答案 0 :(得分:3)
我参与了多个中型到大型项目,你描述的漏洞似乎是递归处理的问题。您需要从最嵌套的项目中真正反省您的对象,并从该点开始处置(停止,取消,配置bitmapdata并删除侦听器)。
我建议你看看那些: 一个好的探查器: https://code.google.com/p/flashpreloadprofiler/
鸟笼套件上的Quasimondo开发人员遇到大位图问题并显示模拟内存分配的应用程序: http://www.quasimondo.com/archives/000691.php http://www.quasimondo.com/examples/memoryhog.html
另外,对于有关GC问题的更多资源,我建议您使用Adobe Jira和Bugbase系统: https://bugs.adobe.com/
我认为这个说法没有任何价值。另请阅读Andy Moore评论:
因此快速传递on-death = null代码,我的记忆减半了 脚印。通过评论,我能够再将其降低80% 我所有的“.cacheAsBitmap = true”语句。
答案 1 :(得分:2)
您可以尝试使用SWFWire Debugger查看未收集哪些对象。
免责声明:这是我自己的项目