java-android设计模式学习笔记(5):对象池模式-编程开发技术

java-android设计模式学习笔记(5):对象池模式-编程开发技术

ID:30768794

大小:135.38 KB

页数:12页

时间:2019-01-03

java-android设计模式学习笔记(5):对象池模式-编程开发技术_第1页
java-android设计模式学习笔记(5):对象池模式-编程开发技术_第2页
java-android设计模式学习笔记(5):对象池模式-编程开发技术_第3页
java-android设计模式学习笔记(5):对象池模式-编程开发技术_第4页
java-android设计模式学习笔记(5):对象池模式-编程开发技术_第5页
资源描述:

《java-android设计模式学习笔记(5):对象池模式-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、java/android设计模式学习笔记(5):对象池模式-编程开发技术java/android设计模式学习笔记(5):对象池模式原文出处:Shawn_Dut这次要介绍一卜对象池模式(ObjectPoolPattern),这个模式为常见23种设计模式之外的设计模式,介绍的初衷主要是在平时的android开发中经常会看到,比如ThreadPool和MessagePool等。在jeva中,所有对象的内存曲虚拟机管理,所以在某些情况下,需要频繁创建一些生命周期很短使用完Z后就可以立即销毁,但是数量很大的对象集合,那么此时GC的次数必然会增加,这时候为了减小系统GC的压力,对彖池模式就很适用

2、了。对象池模式也是创建型模式之一,它不是根据使用动态的分配和销毁内存,而是维护一个已经初始化好若干对象的对象池以供使用。客户端使用的吋候从对象池中去申请一个对象,当该对象使用完之后,客户端会返回给对象池,而不是立即销毁它,这步操作可以手动或者口动完成。从Java语言的特性来分析一下,在Java屮,对彖的生命周期大致包括三个阶段:对彖的创建,对象的使用,对象的清除。因此,对象的生命周期长度可用如下的表达式表示:T二Tl+T2+T3。其屮T1表示对象的创建吋间,T2表示对象的使用时间,而T3则表示其清除时间。曲此,我们可以看出,只冇T2是真止有效的时间,而Tl、T3则是对象木身的开销。卜

3、•面再看看Tl、T3在对象的整个生命周期屮所占的比例。Java对象是通过构造函数来创建的,在这一过程中,该构造函数链中的所有构造函数也都会被自动调用。另外,默认情况下,调用类的构造函数吋,Java会把变量初始化成确定的值:所有的对象被设置成nul1,整数变量(byte>short>int>long)设置成0,float和double变量设置成0.0,逻辑值设置成falseo所以用new关键字来新建一个对象的时间开销是很大的,如下表所示:运算操作示例标准化时间本地赋值i=n1.()实例赋值this.i=n1.2方法调用Funct()5.9新建对象NewObject()980新建数组Ne

4、wint[10]3100从表中可以看出,新建一个对象需耍980个单位的吋间,是本地赋值时间的980倍,是方法调用时间的166倍,而若新建一个数组所花费的时间就更多了。再看清除对彖的过程,我们知道,Java语言的一个优势,就是Java程序员勿需再像C/C++程序员那样,显式地释放对象,而由称为垃圾收集器(GarbageCollector)的口动内存管理系统,定时或在内存凸现出不足时,口动冋收垃圾对象所占的内存。凡事有利总也有脾,这虽然为Java程序设计者提供了极犬的方便,但同时它也带来了较大的性能开销。这种开销包括两方而,首先是对彖管理开销,GC为了能够正确释放对彖,它必须监控每一个对

5、彖的运行状态,包描对象的申请、引用、被引用、赋值等。其次,在GC开始回收“垃圾”对象吋,系统会暂停应用程序的执行,而独自占用CPUo因此,如杲要改善应用程序的性能,一方面应尽量减少创建新对象的次数;同时,述应尽量减少Tl、T3的时间,而这些均可以通过对彖池技术来实现。所以对彖池主要是用来提升性能,在某些情况下,对象池对性能有极大的帮助。但是还有一点需要注意,对象池会增加对象生命周期的复杂度,这是因为从对象池获取的对象和返还给对象池的对象都没有真正的创建或者销毁。PS:对技术感兴趣的同鞋加群544645972一起交流。设计模式总目录java/android设计模式学习笔记目录特点维护一

6、定数量的对象集合,使用时直接向对象池申请,以跳过对象的”expensiveinitialization”。从上面的介绍可以总结:对象池模式适用于“需要使用到大量的同一类对象,这些对象的初始化会消耗人量的系统资源,而冃它们只需要使用很短的吋间,这种操作会对系统的性能有一定影响”的情况,总结一下就是在下面两种分配模式下可以选择使用对彖池:•对象以固定的速度不断地分配,垃圾收集时间逐步增加,内存使用率随Z增大;•对象分配存在爆发期,而每次爆发都会导致系统迟滞,并伴有明显的GC屮断。在绝大多数情况下,这些对象要么是数据容器,要么是数据封装器,其作用是在应用程序和内部消息总线、通信层或某些AP

7、T之间充当一个信封。这很常见。例如,数据库驱动会针对每个请求和响应创建Request和Response对象,消息系统会使用Message和Event封装器,等等。对彖池可以帮助保存和重用这些构造好的对彖实例。对象池模式会预先创建并初始化好一个对象集合用于重用,当某处需要一个该类型的新对象时,它直接向对象池申请,如果此时对象池中冇已经预先初始化好的对象,它就直接返回,如果没有,对象池就会创建一个并且返回;当使用完该对象Z后,它会将该对象返述给对象池,对彖池会

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。