一个进程,它释放那些不在被应用所使用的对象所占用的内存。不在被应用所使用的对象是指那些不会再被活动着的对象所引用的对象。出过基本类型之外,对象直接传递的是对象的引用,而不是对象本身。AS 采用引用计数法和标记清除法来标示对象的引用,判断是否对其进行垃圾回收。
2.引用计数法
示例代码:
var a:Object={fool:"bar"};
//对象a的引用计数为1(a)
var b:Object=a;
//现在a的引用计数器为2(a)
delete a;
//a的引用计数器变为1
delete b;
//b 的引用计数器变为0, 现在a可以被gc了。
对象循环引用之后有些引用不会被gc
3.标记删除法
第二种GC策略为标记清除法。
flashplayer 从root 查询不在被使用的引用,然后删除整个树包括子节点。这种方法比较耗时,所以不是经常的采用这种方法来gc。
4.gc的回收时机
(1),何时真正执行垃圾回收不可预知
(2),垃圾回收总是在请求内存时触发,而不是在对象删除时发生。
5.强制回收垃圾的技巧。
官方并没有提供api来gc
强制回收垃圾的代码:
import flash.net.LocalConnection;
import flash.system.System;
public class Memory
{
public function Memory()
{
//TO DO
}
public static function gc() : void
{
try
{
new LocalConnection().connect( 'foo' );
new LocalConnection().connect( 'foo' );
}
catch ( e : * ) {}
}
public static function get used() : Number
{
return System.totalMemory;
}
}
import flash.system.System;
public class Memory
{
public function Memory()
{
//TO DO
}
public static function gc() : void
{
try
{
new LocalConnection().connect( 'foo' );
new LocalConnection().connect( 'foo' );
}
catch ( e : * ) {}
}
public static function get used() : Number
{
return System.totalMemory;
}
}