垃圾回收是什么?
“垃圾回收”指从内存中删除无用的对象(没有任何活跃引用的对象)。
垃圾回收的时机
- 在一个应用生命周期中,Flash Player 只在必要的时候才执行垃圾回收。 没有引用的一个对象并不会立即触发垃圾回收。因此,当你把一个对象的所有引用都删除时,垃圾回收也不一定释放它所占用的内存,但此时那个对象会被标记为垃圾回收的候选者。
- 典型的,垃圾回收在为新资源分配内存时触发。
- 当新资源需要的内存在当前配分中无效时,垃圾回收器会运行、释放那些被标记为可释放的内存。作为结果,即使你删除了一个对象的所有引用,它也不会被立即回收,但可能在其他的对象创建和使用时回收。
- 如果应用处于停顿状态,此时即使存在可回收的对象那么它也不会被回收,除非你继续与应用通信。
- Flash Player 以块(很多字节)为单位分配内存,而不是一次一个字节。如果块的一部分标记为可回收但其他部分未被标记,那么此块对应的内存不会被释放。
Flash Player 采用以下方法判断对象是否存在引用
- 引用计数法 CPU开销小但不能检测到循环引用的情况
- 标记清除法 CPU开销大但检测准确
详细请参考:
Garbage collection internals for Flash Player and Adobe AIR
Understanding Memory Leaks in ActionScript (Adobe Flex)