`
tianke66
  • 浏览: 183230 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

对象池化技术

阅读更多

对象池化技术
 对象池化的基本思路是:将用过的对象保存起来,等下一次需要这种对象的时候,再拿出来重复使用,从而在一定程度上减少频繁创建对象所造成的开销。用于充当保存对象的“容器”的对象,被称为“对象池”(Object Pool,或简称Pool)。

 对于没有状态的对象(例如String),在重复使用之前,无需进行任何处理;对于有状态的对象(例如StringBuffer),在重复使用之前,就需要把它们恢复到等同于刚刚生成时的状态。由于条件的限制,恢复某个对象的状态的操作不可能实现了的话,就得把这个对象抛弃,改用新创建的实例了。

 并非所有对象都适合拿来池化——因为维护对象池也要造成一定开销。对生成时开销不大的对象进行池化,反而可能会出现“维护对象池的开销”大于“生成新对象的开销”,从而使性能降低的情况。但是对于生成时开销可观的对象,池化技术就是提高性能的有效策略了。


什么时候不要池化
  采用对象池化的本意,是要通过减少对象生成的次数,减少花在对象初始化上面的开销,从而提高整体的性能。然而池化处理本身也要付出代价,因此,并非任何情况下都适合采用对象池化。


 对于类似Point这样的轻量级对象,进行池化处理后,性能反而下降,因此不宜池化;  

  对于类似Hashtable这样的中量级对象,进行池化处理后,性能基本不变,一般不必池化(池化会使代码变复杂,增大维护的难度);

   对于类似JPanel这样的重量级对象,进行池化处理后,性能有所上升,可以考虑池化。

   根据使用方法的不同,实际的情况可能与这一测量结果略有出入。在配置较高的机器和技术较强的虚拟机上,不宜池化的对象的范围可能会更大。不过,对于像网络和数据库连接这类重量级的对象来说,目前还是有池化的必要。

  基本上,只在重复生成某种对象的操作成为影响性能的关键因素的时候,才适合进行对象池化。如果进行池化所能带来的性能提高并不重要的话,还是不采用对象池化技术,以保持代码的简明,而使用更好的硬件和更棒的虚拟机来提高性能为佳。


 

分享到:
评论

相关推荐

    java对象池化技术

    java对象池化技术 java对象池化技术 java对象池化技术

    java对象池化技术[参照].pdf

    java对象池化技术[参照].pdf

    .Net Core中ObjectPool的使用与源码解析

    运用对象池化技术可以显著地提升性能,尤其是当对象的初始化过程代价较大或者频率较高。下面是ObjectPool源码中涉及的几个类。当你看过.Net Core源码很多时,你会发现,微软的开发很多都是这种模式,通过Policy构建...

    commons-pool2-2.4.2.zip

    为了避免重新造轮子,我们可以使用优秀的开源对象池化组件apache-commons-pool2,它对对象池化操作进行了很好的封装,我们只需要根据自己的业务需求重写或实现部分接口即可,使用它可以快速的创建一个方便,简单,...

    Java线程池技术详解

    如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些"池化资源"技术产生的原因。 2.简介 线程池(thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而...

    计算机视觉+深度学习+卷积神经网络(CNN)+图像识别与分析 卷积神经网络(CNN)是深度学习在计算机视觉领域的核心技术,主要

    计算机视觉与深度学习结合,卷积神经网络(CNN)已成为图像识别与分析的核心技术。CNN利用其独特的卷积层结构,有效提取图像中的层次特征,使得在图像分类、物体检测、图像分割等多种视觉任务中取得了突破性进展。 ...

    ThreadPool:Java 线程池的使用 例子

    如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些"池化资源"技术产生的原因。比如大家所熟悉的数据库连接池正是遵循这一思想而产生的,本文将介绍的线程池技术同样符合这一思想。目前,一些著名的...

    Java高并发高性能分布式框架从无到有微服务架构设计.doc

    Java高并发高性能分布式框架从...高并发- 多级缓存(分布式缓存)高并发- 池化在应用系统开发过程中,我们经常会用到池化技术,如对象池、连接池、线程池等 ,通过池化来减少一些消耗,以提升性能。 对象池通过复用对象

    CNN预测电影评分;基于CNN和协同过滤算法对电影进行推荐,并且可视化.zip

    常见的池化方法有最大池化和平均池化,它们分别取局部区域的最大值或平均值作为输出。池化操作可以减少模型对微小位置变化的敏感度,同时保留重要的全局或局部特征。 ### **4. 多层级抽象** CNN通常包含多个卷积和...

    基于CNN的垃圾邮件分类系统.zip

    常见的池化方法有最大池化和平均池化,它们分别取局部区域的最大值或平均值作为输出。池化操作可以减少模型对微小位置变化的敏感度,同时保留重要的全局或局部特征。 ### **4. 多层级抽象** CNN通常包含多个卷积和...

    《基于卷积神经网络(CNN)的网络流量分类》优秀本科毕设相关文档.zip

    常见的池化方法有最大池化和平均池化,它们分别取局部区域的最大值或平均值作为输出。池化操作可以减少模型对微小位置变化的敏感度,同时保留重要的全局或局部特征。 ### **4. 多层级抽象** CNN通常包含多个卷积和...

    基于CNN卷积神经网络实现实时分辨人脸微表情.zip

    常见的池化方法有最大池化和平均池化,它们分别取局部区域的最大值或平均值作为输出。池化操作可以减少模型对微小位置变化的敏感度,同时保留重要的全局或局部特征。 ### **4. 多层级抽象** CNN通常包含多个卷积和...

    基于CNN的新浪新闻文本分类.zip

    常见的池化方法有最大池化和平均池化,它们分别取局部区域的最大值或平均值作为输出。池化操作可以减少模型对微小位置变化的敏感度,同时保留重要的全局或局部特征。 ### **4. 多层级抽象** CNN通常包含多个卷积和...

    利用Tensorflow实现基于CNN的中文短文本分类.zip

    常见的池化方法有最大池化和平均池化,它们分别取局部区域的最大值或平均值作为输出。池化操作可以减少模型对微小位置变化的敏感度,同时保留重要的全局或局部特征。 ### **4. 多层级抽象** CNN通常包含多个卷积和...

    一个基于cnn+attention模型、使用tensorflow实现的情感分析模型.zip

    常见的池化方法有最大池化和平均池化,它们分别取局部区域的最大值或平均值作为输出。池化操作可以减少模型对微小位置变化的敏感度,同时保留重要的全局或局部特征。 ### **4. 多层级抽象** CNN通常包含多个卷积和...

    基于CNN学习ImageNet数据集,实现一个能识别狗品种的图像分类器.zip

    常见的池化方法有最大池化和平均池化,它们分别取局部区域的最大值或平均值作为输出。池化操作可以减少模型对微小位置变化的敏感度,同时保留重要的全局或局部特征。 ### **4. 多层级抽象** CNN通常包含多个卷积和...

    图像识别算法:基于CNN多标签分类的车牌识别;renet残差网络.zip

    常见的池化方法有最大池化和平均池化,它们分别取局部区域的最大值或平均值作为输出。池化操作可以减少模型对微小位置变化的敏感度,同时保留重要的全局或局部特征。 ### **4. 多层级抽象** CNN通常包含多个卷积和...

    基于1D CNN的火灾检测模型.zip

    常见的池化方法有最大池化和平均池化,它们分别取局部区域的最大值或平均值作为输出。池化操作可以减少模型对微小位置变化的敏感度,同时保留重要的全局或局部特征。 ### **4. 多层级抽象** CNN通常包含多个卷积和...

    Pytorch下基于CNN识别网络用于识别4位数以上的验证码(包括大小写,数字).zip

    常见的池化方法有最大池化和平均池化,它们分别取局部区域的最大值或平均值作为输出。池化操作可以减少模型对微小位置变化的敏感度,同时保留重要的全局或局部特征。 ### **4. 多层级抽象** CNN通常包含多个卷积和...

    基于CNN实现对摄像头捕捉的人脸进行性别和年龄的预测.zip

    常见的池化方法有最大池化和平均池化,它们分别取局部区域的最大值或平均值作为输出。池化操作可以减少模型对微小位置变化的敏感度,同时保留重要的全局或局部特征。 ### **4. 多层级抽象** CNN通常包含多个卷积和...

Global site tag (gtag.js) - Google Analytics