AS 垃圾回收一、 Flash Player 垃圾回收机制: Flash Player 垃圾回收工作是由垃圾回收器( garbage collector ) 完成的。垃圾回收器是运行在后台的一个进程, 它释放那些不再被应用所使用对象所占用的内存。不再被应用所使用的对象是指那些不再会被那些活动着(工作着)的对象所“引用”的对象。在 AS 中,对于非基本类型( Boolean, String, Number, uint, int )的对象,在对象之间传递的都是对象引用, 而不是对象本身。删除一个变量只是删除了对象的引用, 而不是删除对象本身。一个对象可以被多处引用, 通过这些不同的引用所操作的都是同一个对象。通过以下两段代码可以了解基本类型和非基本类型对象的差异: 基本类型的值传递: private function testPrimitiveTypes():void { var s1:String="abcd"; // 创建了一个新字符串 s1 ,值为"abcd" var s2:String=s1; //String 是基本类型,所以创建了一个新的字符串 s2, s2 的值拷贝自 s1。 s2+="efg"; // 改变 s2 的值 s1 不会受影响。 trace("s1:",s1); // 输出 abcd trace("s2:",s2); // 输出 abcdefg var n1:Number=100; // 创建一个新的 number, 值为 100 。 var n2:Number=n1; //Number 是基本类型, 所以又创建一个新 number n2,n2 的值拷贝自 n1。 n2=n2+100; // 改变 n2对 n1 不会有任何影响。 trace("n1",n1); // 输出 100 trace("n2",n2); // 输出 200 } 非基本类型对象的引用传递: private function testNonPrimitiveType():void { // 创建一个新对象, 然后将其引用给变量a : var a:Object = {foo:"bar"} // 将上面所创建对象的引用拷贝给变量b ( 通过变量b建立对对象的引用) : var b:Object = a; // 删除变量 a 中对对象的引用: delete(a); // 测试发现对象仍然存在并且被变量 b 所引用: trace(); // 输出"bar", 所以对象仍然存在} 对于非基本类型对象, AS3 采用两种方法来判定一个对象是否还有活动的引用, 从而决定是否可以将其垃圾回收。一种方法是引用计数法, 一种方法是标记清除法。 Reference Counting 引用计数法是判定对象是否有活动引用的最简单的一种方法, 并且从 AS1 就开始在 Flash 中使用。当创建一个对对象的引用后, 对象的引用计数就加一, 当删除一个引用时, 对象的引用技术就减一。如果对象的引用计数为0,那么它被标记为可被 GC( 垃圾回收器) 删除。例如: var a:Object = {foo:"bar"} // 现在对象的引用计数为1 (a) var b:Object = a; // 现在对象的引用计数为 2(a 和b ) delete(a); // 对象的引用计数又回
AS垃圾回收 来自淘豆网m.daumloan.com转载请标明出处.