我们有相当庞大的代码库编译并开始在 FlasCC 中运行。当您打开 .swf 文件时,播放器的内存使用量约为 300MB。这或多或少都很好,因为似乎仍有大约 300MB 的动态分配内存可供 C++ 代码使用。
当我们创建线程时,问题就开始了。根据文档,每个线程都将 .swf 复制到内存中并在沙箱中运行。这是否意味着每个 pthread 都会占用播放器打开 .swf 所使用的相同的约 300MB 内存?
似乎是这样。我已经对生成 pthread 和转储内存使用(flash.system.System向我们报告的内容以及CModule.ram.length)进行了简单的测试。这是日志:
Starting 10 threads.
Memory usage: total=288MB private=335MB free=2MB CModule=33MB
Thread 0 started.
Memory usage: total=683MB private=732MB free=1MB CModule=36MB
Thread 1 started.
Memory usage: total=1071MB private=1121MB free=1MB CModule=37MB
Thread 2 started.
Memory usage: total=1459MB private=1510MB free=1MB CModule=38MB
此时 plash_player_debugger 已经退出(崩溃)而没有任何错误消息。
这基本上意味着我们没有线程。启动 2 个 pthread 后,C++ 代码只剩下约 50MB 的可用内存。
Adobe Scout 对内存使用情况进行了更深入的细分。以下是 .swf 使用 2 个后台线程运行时报告的内容:(来自 Adobe 论坛上相同问题的图片)
在生成这 2 个空闲 pthread 后,“其他”块已从 11 MB 膨胀到 800 MB。记忆进入“其他玩家”和“未分类”。
所以主要问题是:如何解决这个问题?也许有办法让 AS3 工作者消耗更少的内存?