`
gavin.zheng
  • 浏览: 20279 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

对象的池化

阅读更多
很多时候,要创建一个资源类对象,或者是一个大的应用数据对象,所花费的开销都是巨大的. 比如要建立一个连接,要根对方获得握手协定等等. 像这些花销巨大的对象,保存来做成全局不行,因为当前只能供给一个线成使用,那就只能池化了
池化的对象特点是:对象一次只能供给一个线成使用.但又必须尽量保存,以避免巨大的构建开销.
/**Resources是一个将要被池化的对象的接口,有一个被动撤消的close方法(为符合一般性资源类要求)
*/
interface Resources{
void close(){};
}

//真正的资源类
class ConcreteResources implements Resources{
void close(){
   //销毁内部相关资源eg: ...=null;
}
}

/**资源对象池
*/
class ResourcesPool implements Resources{

private List resL = null;
private int CACHE_MAX_SIZE = 10;


public synchronized Resources getResources(){
   if(resL == null)
      resL = new ArrayList();
   if(resL.isEmpty){
      Resources res = new DecResources();
      return res;
   }else{
   int last= resL.size()-1;
   Resources res = resL.get(last);
   resL.remove(last);
   return res;
   }
}

public synchronized void release(Resources res){
   if(resL.size>CACHE_MAX_SIZE){
     res.getReources.close();
   }else{
   resL.add(res);
   }
}

public synchronized void addResources throws Exception(Resources res){
   if(res instanceof DecResources){
     release(res);
   }else(throw new Exception("添加资源类型错误"))
}
}

/**为封闭掉close采用Decortor模式*/
class DecResources extends ResourcesPool implements Resources{
private Resources res= new ConcreteResources();

public void close(){
   release(this);
}

//为直接关闭提供出res
public Resources getResources(){
   return res;
}
}

/**使用:
如果需要获得对象,只需要
ResourcesPool pool = new ResourcesPool();
pool.add(new ...);
Resources res = pool.getResources();
使用.....
res.close();
*/


这是个简单的模型, close是针对大量资源类都提供的方法, 并不一定需要,自己的对象不要最好.逻辑看起来挺麻烦的.

同样,由于使用的是公共非栈对象,给出了syn,,如果使用频繁,类似cache,就使用rw


rw使用方式如下:
ReadWriteLock rw = ReentrantReadWriteLock();
Lock r = rw.readLock();
Lock w = rw.writeLock();

在类中需要读的方法段
r.lock();
...
r.unlock();

在类中需要写的方法段
w.lock();
...
w.unlock();


好多东西都忘记了,要查api,刚好复习下 呵呵
再次说明,这只是例子,编码是随心所欲的..
分享到:
评论
7 楼 jeffyan 2008-12-03  
kebo 写道
bloodrate 写道
除非有明确的证据证明池化能提高性能,否则尽量不要,Effective Enterprise JAVA上介绍说多数情况下池化却减低性能或者解决了问题却引来了更大的问题,所以池化要三思,一般像connection这么重量级的对象才池化

正解,有时不要搞的太复杂,得不偿失。不要怀疑现代jvm的实力,除非有计量数据明确显示。
有时我们的优化,大部分是在做无用功,想当然的优化。所以三思


6 楼 jeffyan 2008-12-03  
bloodrate 写道
除非有明确的证据证明池化能提高性能,否则尽量不要,Effective Enterprise JAVA上介绍说多数情况下池化却减低性能或者解决了问题却引来了更大的问题,所以池化要三思,一般像connection这么重量级的对象才池化

对的 池化会导致更复杂
5 楼 kebo 2008-11-21  
bloodrate 写道
除非有明确的证据证明池化能提高性能,否则尽量不要,Effective Enterprise JAVA上介绍说多数情况下池化却减低性能或者解决了问题却引来了更大的问题,所以池化要三思,一般像connection这么重量级的对象才池化

正解,有时不要搞的太复杂,得不偿失。不要怀疑现代jvm的实力,除非有计量数据明确显示。
有时我们的优化,大部分是在做无用功,想当然的优化。所以三思
4 楼 puroc 2008-11-21  
关于commons-pool,我有一个疑问。我发现我的应用程序启动的时候会比较慢。起初发现是我们使用dbcp的连接池在初始化的时候会比较慢。当继续往里跟的时候,发现是dbcp连接池创建连接时,调用commons-pool创建对象时比较慢。没有设置dbcp的最小连接数,默认好像是5个。不知道为什么创建这5个对象为什么会这么慢。大概需要5,6秒中的时间。我们程序的启动速度主要就是被dbcp连接池和jax2初始化给拖慢的。(jax1初始化比jax2快)
3 楼 bloodrate 2008-11-05  
除非有明确的证据证明池化能提高性能,否则尽量不要,Effective Enterprise JAVA上介绍说多数情况下池化却减低性能或者解决了问题却引来了更大的问题,所以池化要三思,一般像connection这么重量级的对象才池化
2 楼 sdh5724 2008-11-04  
commons-pool项目去看过么. 好象还可以啊
1 楼 WhisperXD 2008-11-04  
此对象无法继承任何对象。。

相关推荐

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

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

    java对象池化技术

    Java 对象池化技术 Java 对象池化技术是一种高效的编程技巧,旨在减少对象生成和初始化时的消耗,提高系统的运行效率。通过使用 Jakarta Commons Pool 组件,可以实现对象池化,减少处理对象池化时的工作量,为其它...

    Apache的对象池化工具commons-pool

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

    commons-pool2-2.4.2.zip

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

    pool-1.5.4

    《Apache Commons Pool 1.5.4:对象池化技术详解》 Apache Commons Pool 是一个广泛使用的开源组件,主要用于实现对象池化技术。版本号"pool-1.5.4"代表着这一组件的一个稳定版本,它在之前的基础上进行了优化和...

    commons-pool资源下载

    commons-pool资源下载,东西齐全,包括api文档开发,Apache的对象池化工具commons-pool 当我们的应用中创建一个十分最重量级的对象的时候,往往为了节省资源成本,使用单例模式,整个的应用中就只有一个对象供大家...

    commons-pool-1.5.5.jar.zip

    《Apache Commons Pool 1.5.5:Java对象池化框架详解》 Apache Commons Pool 是一个广泛使用的开源项目,提供了一种高效的对象池化服务。本篇将详细讲解Apache Commons Pool 1.5.5版本的核心特性、工作原理以及如何...

    commons-pool-1.4.jar

    Apache Commons Pool 是一个开源项目,提供了一套对象池化服务。在Java编程中,对象池化是一种优化资源管理的技术,通过预先创建并维护一组可重用对象,避免频繁的创建和销毁对象带来的性能开销。`commons-pool-1.4....

    COM+ Services.doc

    1. 对象池化(Object Pooling): 对象池化是一种优化技术,用于减少创建和销毁对象的开销。通过预先创建一组对象并重复使用它们,可以避免频繁的对象创建和销毁过程。在COM+中,对象必须是无状态的(即不包含数据...

    commons-pool.jar

    Apache Commons Pool是Java编程领域中一个重要的开源库,主要用于对象池化,特别是在数据库连接管理方面扮演着核心角色。标题中的"commons-pool.jar"即为此库的可执行文件,它包含了Apache Commons Pool 1.5.4版本的...

    commons-pool-1.6

    Apache Commons Pool 1.6是Java开发中一个重要的工具库,专门用于对象池化服务。对象池化是一种优化资源管理的技术,它通过预先创建并维护一组可重用对象,避免了频繁的对象创建和销毁,从而提高了系统性能。在...

    commons-pool2-2.9.0.jar

    这个库是Apache软件基金会开发的,版本号为2.9.0,它提供了高效的对象池化机制,有助于提高应用程序的性能和稳定性。 对象池化是一种设计模式,它通过预先创建一组对象并维护一个池来减少对象的创建和销毁次数。在`...

    commons-pool2-2.8.1.jar

    Apache Commons Pool 是一个广泛使用的开源组件,主要用于提供对象池化的实现。在Java世界里,对象池化是一种优化资源管理的重要技术,通过复用已创建的对象,避免频繁的创建和销毁过程,从而提升系统性能。最新版本...

    commons-pool-1.2-src.zip

    Apache Commons Pool 是一个开源项目,提供了对象池化的实现,它是一个通用的对象池库,用于创建各种资源对象的池,如数据库连接池。标题中的"commons-pool-1.2-src.zip"表明这是一个包含Apache Commons Pool 1.2...

    commons-pool2-2.4.2-src

    Apache Commons Pool2是Apache软件基金会开发的一个开源项目,主要用于对象池化。对象池化是一种优化资源管理的技术,通过预先创建并维护一组可重用对象,避免频繁地创建和销毁对象,从而提高系统的性能和效率。Pool...

    common poo. jar包

    "Common Pool"是一个在Java开发中广泛使用的池化库,主要功能是提供对象池化的服务。这个"common poo. jar包"(可能是由于输入错误,正确的名称应该是"common-pool.jar")包含了Apache Commons Pool库的实现,版本为...

    commonsJar包(包含常用jar)

    在本案例中,提及的`commons-pool-1.6.jar`是Apache Commons中的一个组件,专门用于对象池化。 Apache Commons Pool是Java对象池设计模式的一个实现。对象池是一种设计模式,它通过预先创建并维护一组可重用的对象...

    能约束参数类型的,能约束调用类型的的基于Unity3D的轻量级本地消息系统。CoEvent也支持单线程异步,池化管理。.zip

    总之,CoEvent是一款为Unity3D开发者量身打造的轻量级本地消息系统,它的类型约束、单线程异步处理和对象池化管理等特性,旨在提供高效、稳定且易于使用的事件通信解决方案。对于任何寻求优化代码结构和提升性能的...

Global site tag (gtag.js) - Google Analytics