`
windmark
  • 浏览: 30599 次
社区版块
存档分类
最新评论

对象池工具类

    博客分类:
  • AS3
 
阅读更多

早在2008年三年就发布了一个对象池工具类,允许你在集合中放置对象,在需要时再用,众所周知Flex的组件使用代价较高,应该避免有所浪费。对象池在处理反复使用同一对象的情况下是一种很好的设计模式。
  原因是创建对象时需要较多资源,应避免反复创建对象。我再次查看了2008年写的这个类,虽然它工作状态良好,但注意到一件事,以前用的是ArrayCollection。现在用我开发的弱引用字典HashCollection工具类替代ArrayCollection。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下载ReusablePool类:

这个项目的地址是:
http://code.google.com/p/eladlib/

关于对象池,在这个项目里的位置是:
Library\src\com\elad\framework\utils\collections
和Library\src\com\elad\framework\objectpoolmanager\ReusablePool.as

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
用一个例子来实现,该程序将会采用三个对象:视频,图像和列表组件。当你为应用程序添加元素,接着移除它,不断地添加对象会增加内存消耗,你会看到小迟缓。然而,采用对象池,对象被缓存并保存对象实例能降低内存使用。正如你所看到的即使添加和移除对象程序运行也很平稳。
完整地实现代码如下:
codeall.png 
运行效果:
pic_1.png 
   为了测量内存使用情况,你可以使用由 Mr.doob.开发的小型统计类。此外,你也可以使用Eclipse Profiler进行查看。在第一种情况,为程序添加一个元素再移除它,如果程序有内存泄漏profiler分析器会用“红色”线条向你展示。我不是说红色就一定表示内存泄漏,但是要指出的是这时内存使用率很高,因为对象被移除了但垃圾回收器还没有回收到。如你所知,采用removeAllChildren()移除组件中的所有对象,但未必能确保GC能立即释放内存。见Profiler屏幕截图如下:
pic_2.png 
第二个方案,对象被缓存,我没有做任何内存限制。见图:
<ignore_js_op style="word-wrap: break-word; margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Tahoma, Helvetica, SimSun, sans-serif;">pic_3.png 
    该工具类可以限制存储的对象数量,加上约束逻辑类,当需要时再清除所有对象。
    让我们看看该代码创建一个工具类实例,并添加一个对象。
    该工具类是一个单例,所以我们可以在应用程序的生命周期内使用同一个对象。

private var reusablePool:ReusablePool = ReusablePool.getInstance();  

 

添加一个可重用对象。

reusablePool.setReusable( new Reusable(createUI(), "FlexImage") );  

 

可以用acquireReusable方法重新得到对象,之后会将该对象从集合中移除。

// getting the collection  
var reusable:Reusable = reusablePool.acquireReusable(name);  
var component:UIComponent = reusable.object as UIComponent;  

 

使用完毕发送对象至对象池可以用如下代码:

 reusablePool.releaseReusable(reusable);  

 

 

分享到:
评论

相关推荐

    Unity 工具类 之 简单的对象池管理类 ObjectPoolManager 实现

    Unity 工具类 之 简单的对象池管理类 ObjectPoolManager 实现 1、单例类,保证整个场景中只有一个类管理对象池; 2、把需要的对象以对象池形式管理起来,需要的时候 拿出来显示即可,不需要的时候隐藏以来即可; ...

    Http连接池工具类

    传统的HttpURLConnection并不支持连接池,如果要实现连接池的机制,还需要自己来管理连接对象。对于网络请求这种底层相对复杂的操作,个人以为如果有可用的其他方案,也没有必要自己去管理连接对象。 除了...

    Java整理的基础工具类项目

    Json对象转换工具类 MD5工具类 Number工具类 Spring工具类 电话操作类 地理坐标处理WGS-84坐标转换成百度坐标工具类 DES加密工具类 参数验证注解 Xss攻击 接口访问超时拦截器 二叉树模糊匹配数字 Socket连接池封装 ...

    java操作redis工具类

    java操作redis工具类 可以支持单个redis对象或者是连接池 支持分片

    通用工具类

    2.JDBC工具类,提供数据库连接池,结果集映射成对象功能 3.常用加密算法工具类,包括MD5、SHA、DES、HMAC、Base64等 4.RSA加解密,RSA签名、签名验证类 5.文件处理工具类,实现文件的复制、移动、查找、追加内容等。...

    一个通用的Java线程池类

    环境:Windows XP ...这里本人翻写一个通用的线程池类,它可以用来作为工具类处理许多多线程问题。代码注释非常详尽,一行注释一行代码。 阅读对象:非常熟悉Java的基本概念,并且熟悉命令行编写代码的人员。

    使用Java编写的RabbitMQ连接池方法

    RabbitMQ客户连接池的Java实现。我们刚开始也是采用这种方式来实现的,但做压力测试时,发现这种每次新建Connection和新建Channel是非常耗时的,在大并发下,一般都要8...因此我们创建了Java的RabbitMQ的连接池对象。

    okhttp中连接池实现

    代码中包含okhhtp中连接池的设计,包含连接对象的添加,连接对象何时被移除。

    javaBean自动生成工具,jdbc连接池封装

    根据mysql数据库自动生成对应的javabean,附带jdbc连接池工具类封装,支持Resultset转List javabean对象

    shawn-common-utils:Java整理的基础工具类项目

    Json对象转换工具类 MD5工具类 Number工具类 Spring工具类 电话操作类 地理坐标处理WGS-84坐标转换成百度坐标工具类 DES加密工具类 参数验证注解 Xss攻击 接口访问超时拦截器 二叉树模糊匹配数字 Socket连接池封装 ...

    DBCP( Database Connection Pool )数据库连接池

    在使用写连接池工具类的时候,可以通过配置文件来连接数据库,配置文件中记录了连接数据库的驱动、URL、用户名和密码等信息;但要注意这里的文件后缀为:“.properties”。 把通过配置文件连接数据库的部分写在静态...

    基于spark的电商用户行为分析系统源码+项目说明.zip

    conf:配置工具类,获取commerce.properties文件中的所有配置信息, 使用户可以通过对象的方式访问commerce.properties中的所有配置 constant:常量接口,包括项目中所需要使用的所有常量 model: Spark SQL样例类,...

    JDBC连接MySQL数据库实现增删改查(Dao层实现 解决硬编码 配置连接池获得连接对象 )

    工具类 JDBCUtil.java(抽取公共部分,解决硬编码问题 DBCP方式实现连接池、配置连接池 ==&gt; 获得连接对象连接数据库) 用户账号实体类 User.java(私有化数据库t_user表中的id,username,password) 接口类 ...

    objects.js:使用Javascript进行高性能游戏的核心类工具和对象池

    通用对象池-垃圾回收不好,自动超快速对象池好! 类和对象ID LinkedList-高性能的双链表 设备-与设备无关的地图(嗯,无论如何还是一个起点) 为什么? 我喜欢用javascript开发大型高性能的游戏,例如游戏,但是...

    高性能的数据库连接池

    高性能的java连接数据库工具类,通过连接池管理数据库连接对象

    Java学习日志(三十三): JDBC预处理对象,连接池C3P0

    用户注入攻击数据库解决用户注入式攻击PreparedStatement对象对数据库表进行增删改查连接池连接池的原理连接池的规范接口DataSource创建并测试C3P0连接池的工具类带XML配置文件的C3P0连接池工具类 JDBC预处理对象 ...

Global site tag (gtag.js) - Google Analytics