ActionScript3.0垃圾回收

as3的flash运行器中新增了垃圾回收的机制,即自动从内存中清除一些不可访问的对象。这个过程我们是无法控制的,不过可以通过一个例子来观察这个过程:

 

package
{
  import flash.display.Sprite;
  import flash.text.TextField;
  import flash.utils.Timer;
  import flash.events.Event;
  import flash.events.TimerEvent;
  import flash.system.System;
  public class GarbageCollection extends  Sprite{
     public function  GarbageCollection(){
        vars:Sprite=newSprite;
        s.graphics.beginFill(0,1);
        s.graphics.drawRect(0,0,100,100);
        //addChild(s);
       s.addEventListener(Event.ENTER_FRAME,enterframelistener);
       vartimer:Timer=newTimer(1);
       timer.addEventListener(TimerEvent.TIMER,timelistener);
       timer.start();
    }
    privatefunctiontimelistener(e:TimerEvent):void{
       newTextField();
    }
    privatefunctionenterframelistener(e:Event):void{
      trace('FlashPlayer当前所用内存(字节):',System.totalMemory);
    }
  }
}

 

当输出窗口停止输出信息时就意味着在构造方法中创建的局部变量s被当成垃圾给回收了。

如果将addChild(s)取消注释,s就会被放到场景中,从而不被回收。系统转而回收timelistener里创建的n多没用的newTextField,可以看到:
…省略…
FlashPlayer当前所用内存:3403776字节
FlashPlayer当前所用内存:3407872字节
FlashPlayer当前所用内存:3420160字节
FlashPlayer当前所用内存:2142208字节
FlashPlayer当前所用内存:2146304字节
…省略…
很明显可以看到垃圾回收的过程。

 

 

 

你可能感兴趣的:(Flash)