Actionscript 3 这是我的AS3 AIR桌面应用程序中的内存泄漏,还是我不必担心?

Actionscript 3 这是我的AS3 AIR桌面应用程序中的内存泄漏,还是我不必担心?,actionscript-3,memory-leaks,garbage-collection,Actionscript 3,Memory Leaks,Garbage Collection,我用1秒的时间运行这个: trace(String(System.totalMemory)); 它显示我的应用程序的内存每5分钟增加约1mb,即使它处于休眠状态 在测试中,当我运行 System.gc(); System.gc(); 在每1秒运行System.totalMemory的同一个函数中,内存会立即下降,并保持在8mb左右。但是如果我跑 System.gc(); System.gc(); 只有一次,内存下降到8mb,但随后继续以先前的速度上升 为什么我的应用程序在处于休眠状态时会增

我用1秒的时间运行这个:

trace(String(System.totalMemory));
它显示我的应用程序的内存每5分钟增加约1mb,即使它处于休眠状态

在测试中,当我运行

System.gc(); System.gc();
在每1秒运行System.totalMemory的同一个函数中,内存会立即下降,并保持在8mb左右。但是如果我跑

System.gc(); System.gc();
只有一次,内存下降到8mb,但随后继续以先前的速度上升

为什么我的应用程序在处于休眠状态时会增加内存使用量,这是一个值得担心的问题,还是System.gc;System.gc;直接删除内存意味着我没有内存泄漏,我应该让垃圾收集器来处理事情


谢谢。

如果内存泄漏,您的内存将毫无目的地增加,并且不会被垃圾收集器完全减少

这将是内存泄漏:

Memory usage: 8 MB
Memory usage: 12 MB
Garbage collection.
Memory usage: 9 MB
Memory usage: 14 MB
Garbage collection.
Memory usage: 10 MB
Memory usage: 16 MB
以此类推,从示例中可以看出,垃圾收集完成后使用的基本内存正在增加。在您的情况下,基本内存是8MB,并且不会增加,因此不会发生泄漏


当您以不再需要的方式消耗内存时,垃圾回收器无法收集内存时,就会发生泄漏。

很可能是后者,因为您的应用程序占用空间不会从8MB增加。但是,有可能有一个活动占用的资源比应用程序后台运行的资源多,从而生成大量事件或其他一次性对象。还要检查你的应用程序是否产生了一些较重的对象,而不是更新它们,如位图数据,这些对象会消耗一些内存块,而这些内存块实际上不会泄漏,但可能会重复使用。谢谢Vesper。我想我在这个问题上有误导性。如果我运行System.gc;system.gc;只是一次,不是每秒钟,内存下降到8mb,然后继续以之前的速度上升。这在这里变化不大。您的应用程序的非GC占用空间不会增长,因此不会出现内存泄漏。我想知道在5分钟内是否有足够的enterframe事件来积累1MB的堆来进行GC。。。至少300*30=9000,许多事件对象可能会占用一兆字节。一些垃圾收集器会等待特定数量的内存被占用。因此,当该限制为200MB时,您必须等待16个小时,直到GC自动减少内存。然而,一些地面军事系统将此限制设置为RAM的四分之一,因此当您有16GB时,限制将是4GB或在GC发生之前等待6天。感谢信息人员-我现在感觉好多了。我让应用程序开了一夜,第二天早上它就降到了8mb左右。仍在以相同的速度增长,但仅达到约12mb,然后将下降。