对象池的工作原理:
对象池的工作原理的核心有两点:使用和缓存,即对于那些被频繁使用的对象,在使用完后,不立即将它们释放,而是将它们缓存起来,以供后续的应用程序反复使用,从而减少创建对象和释放对象的次数,进而改善应用程序的性能。
优点:能快速取出对象节省了new对象所产生的cpu,时间的消耗。能很好的控制内存的占用,使用时从对象池取出,使用完毕放回。中间不涉及到对象销毁创建,所以内存占用是定量的。同时假如对象池提前
缺点:对象池同样消耗new同样对象所消耗的时间,对象池从创建到结束消耗定量的内存。对象池只适合大量的对象需要被反复创建使用销毁创建使用销毁的情况。非提前初始化式内存池,缓存as值类型的对象如:point反而产生更大的消耗。
要实现一个对象池,一般会涉及到以下的几个类:
目标对象(someobject)类
该类就是程序中频繁使用的对象。
对象池(objectpool)类
该类主要用于管理对象的借出和归还,并通知对象池完成相应的工作。它至少包含两个方法:
borrowobject():用于从池中借出对象;
returnobject():将对象归还到池中;
01 |
package wingox.pool { |
02 |
import flash.utils.dictionary; |
03 |
|
04 |
/** |
05 |
* @version 20100315 |
06 |
* @author brightli |
07 |
*/ |
08 |
public class objectpool { |
09 |
|
10 |
private static var _pool : dictionary = new dictionary( true ); |
11 |
|
12 |
private var _template : class ; |
13 |
|
14 |
private var _list : array; |
15 |
|
16 |
public function objectpool(value : class ) { |
17 |
_template = value; |
18 |
_list = new array(); |
19 |
} |
20 |
|
21 |
public function borrowobject() : object { |
22 |
if (_list.length > 0 ) { |
23 |
return _list.shift(); |
24 |
} |
25 |
return new _template(); |
26 |
} |
27 |
|
28 |
public function returnobject(value : object) : void { |
29 |
_list.push(value); |
30 |
} |
31 |
|
32 |
public static function getpool(value : class ) : objectpool { |
33 |
if (!_pool[value]) { |
34 |
_pool[value] = new objectpool(value); |
35 |
} |
36 |
return _pool[value]; |
37 |
} |
38 |
} |
39 |
} |