`
mouer
  • 浏览: 102007 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对象池化技术(1)--为什么要使用

    博客分类:
  • J2SE
阅读更多

网上的转帖很多,其中我任务较为确切的说明是:

http://www.ibm.com/developerworks/cn/java/l-common-pool/index.html

作者在文中写道:

恰当地使用对象池化技术,可以有效地减少对象生成和初始化时的消耗,提高系统的运行效率。

<!-- START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!-- END RESERVED FOR FUTURE USE INCLUDE FILES-->

创建新的对象并初始化的操作,可能会消耗很多的时间。在这种对象的初始化工作包含了一些费时的操作(例如,从一台位于20,000千米以外

的主机上读出一些数据)的时候,尤其是这样。在需要大量生成这样的对象的时候,就可能会对性能造成一些不可忽略的影响。要缓解这个问题,

除了选用更好的硬件和更棒的虚拟机以外,适当地采用一些能够减少对象创建次数的编码技巧,也是一种有效的对策。对象池化技术(Object Pooling)就是这方面的著名技巧,而Jakarta Commons Pool组件则是处理对象池化的得力外援。

对象池化技术:


对象池化的基本思路是:将用过的对象保存起来,等下一次需要这种对象的时候,再拿出来重复使用,从而在一定程度上减少频繁创建对象所造成

的开销。用于充当保存对象的“容器”的对象,被称为“对象池”(Object Pool,或简称Pool)。

对于没有状态的对象(例如String),在重复使用之前,无需进行任何处理;对于有状态的对象(例如 StringBuffer),在重复使用之前,就需要

把它们恢复到等同于刚刚生成时的状态。由于条件的限制,恢复某个对象的状态的操作不可能实现了的话, 就得把这个对象抛弃,改用新创建的实

例了。

并非所有对象都适合拿来池化――因为维护对象池也要造成一定开销。对生成时开销不大的对象进行池化,反而可能会出现“维护对象池的开销”大

于“生成新对象的开销”,从而使性能降低的情况。但是对于生成时开销可观的对象,池化技术就是提高性能的有效策略了。


说道对象池,可能大家第一个想起的就是数据库连接池了.然而 ,我们在使用对象池技术的时候,仅仅只是为了提高性能么?依我看来,池化技术的主要

用途,还是对系统稀缺资源的保护(如数据库连接,IO存取,网络传输等).

也就是说,可以把对象池看成是系统稀缺资源的一个门,这个门可能有多把钥匙,请求只有拥有了钥匙,才能进去这道门.

也就是说: 池可以有效的限制应用对某项资源的访问,从而避免对资源的访问超出了资源本身的承受极限.

分享到:
评论

相关推荐

    Apache的对象池化工具commons-pool

    ### Apache Commons Pool:Java对象池化技术详解 #### 一、引言 在现代软件开发过程中,尤其是在基于Java的企业级应用开发中,资源管理和优化变得尤为重要。创建和销毁对象的成本通常较高,特别是在高并发场景下,...

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

    Java对象池化技术是一种优化程序性能的策略,它通过预先创建一组对象并保留它们,以便在需要时重复使用,而不是每次需要时都创建新的对象。这样可以显著减少对象的创建和初始化时间,尤其适用于那些创建成本较高的...

    高性能:池化技术的应用场景

    池化技术的基本思想是创建一个资源池,预先分配好一定数量的资源(如内存块、数据库连接、线程、对象等),当系统需要使用时,直接从池中获取,而不是每次都需要进行新的分配或创建。使用完毕后,资源不是立即释放,...

    commons-pool2-2.4.2.zip

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

    Java对象池技术的原理及其实现

    为了构建一个灵活且通用的对象池,可以在创建对象池时动态指定所要池化的对象的Class类型。这意味着开发者可以根据具体需求选择不同的对象类型放入池中,提高了对象池的适应性和可扩展性。 #### 使用对象池技术时的...

    commons-pool-1.5.5.jar.zip

    对象池化是一种优化资源管理的技术,通过预先创建并维护一组可重用对象,避免频繁地创建和销毁对象带来的性能开销。在Java中,commons-pool库为开发者提供了通用的对象池API,支持各种类型的对象池化需求。 1. **...

    空间金字塔池化

    这种池化技术通过将输入数据分成不同的区域,并在这些区域内应用最大池化,可以有效地捕捉到多尺度的特征信息。 4. 全连接条件随机场(Fully Connected Conditional Random Field,CRF):在深度学习之后,使用全...

    网络游戏-基于稀疏性随机池化的卷积神经网络的图像识别方法.zip

    1. 数据预处理:首先,需要将游戏截图转化为适合输入CNN的格式,比如灰度化、归一化等。 2. 卷积层:利用卷积核对图像进行扫描,提取特征,这些特征可以捕捉图像的空间关系。 3. 激活函数:如ReLU,引入非线性,使得...

    commons-pool-1.4.jar

    在Java编程中,对象池化是一种优化资源管理的技术,通过预先创建并维护一组可重用对象,避免频繁的创建和销毁对象带来的性能开销。`commons-pool-1.4.jar`是Apache Commons Pool 1.4版本的库文件,它包含了实现对象...

    pool-1.5.4

    Apache Commons Pool 是一个广泛使用的开源组件,主要用于实现对象池化技术。版本号"pool-1.5.4"代表着这一组件的一个稳定版本,它在之前的基础上进行了优化和改进,提供了更可靠和高效的对象复用机制。 对象池化是...

    commons-pool2-2.4.2-src

    对象池化是一种优化资源管理的技术,通过预先创建并维护一组可重用对象,避免频繁地创建和销毁对象,从而提高系统的性能和效率。Pool2是其第二代产品,提供了更完善的对象池管理功能和更好的性能。 在"commons-pool...

    Ruby-Readthis基于Redis的高性能池化ActiveSupport兼容的缓存

    Ruby中的Readthis是一个高效、池化的ActiveSupport兼容的缓存库,它专为与Redis数据库交互而设计。本文将深入探讨Readthis的核心特性、工作原理、安装与使用方法,以及如何将其集成到Ruby应用程序中。 1. **核心...

    unity对象池的案例Demo

    1. **预制体(Prefab)**:预制体是Unity中用于创建对象模板的工具,我们可以将需要池化的对象设置为预制体,以便在运行时快速实例化和回收。 2. **脚本组件**:创建一个C#脚本,负责对象的分配和回收。这个脚本通常...

    commons-pool-1.2-src.zip

    1. **对象池化**:对象池化是一种优化资源管理的技术,通过复用已经创建的对象,避免频繁创建和销毁对象带来的性能开销。在高并发场景下,这种技术能显著提高系统效率。 2. **通用性**:Apache Commons Pool 设计为...

    基于1D-CNN model 的回归预测.zip

    ### **1. 局部感知与卷积操作** **卷积层**是CNN的基本构建块,它通过使用一组可学习的滤波器(或称为卷积核)对输入图像进行扫描。每个滤波器在图像上滑动(卷积),并以局部区域(感受野)内的像素值与滤波器权重...

    最快的目标检测技术论文 yolo v1-v

    YOLOv1的关键概念是将图像划分为网格,每个网格负责预测几个可能的对象边界框及其相关类别。尽管YOLOv1在小物体检测上表现一般,但它在速度和整体性能上取得了平衡。 随后,YOLOv2在YOLOv1的基础上进行了多方面的...

    commons-dbcp-1.2.1.jar commons-pool-1.3.jar struts-legacy.jar

    这三者组合在一起,可能表示一个使用Struts 1.x作为Web框架,并且依赖Apache Commons DBCP进行数据库连接池管理,以及Apache Commons Pool进行通用对象池化的项目。然而,由于版本较旧,这些组件可能存在安全漏洞和...

Global site tag (gtag.js) - Google Analytics