最简单的是SoftReferenceObjectPool(),不预先在池内创建对象,也不指明要用的PoolableObjectFactory实例。 最复杂的一个则是SoftReferenceObjectPool(PoolableObjectFactory factory, int initSize)。其中:
最简单的一个是GenericObjectPool(PoolableObjectFactory factory)。仅仅指明要用的PoolableObjectFactory实例,其它参数则采用默认值。 最复杂的一个是GenericObjectPool(PoolableObjectFactory factory, int maxActive, byte whenExhaustedAction, long maxWait, int maxIdle, boolean testOnBorrow, boolean testOnReturn, long timeBetweenEvictionRunsMillis, int numTestsPerEvictionRun, long minEvictableIdleTimeMillis, boolean testWhileIdle)。其中:
GenericObjectPool(PoolableObjectFactory factory, int maxActive) GenericObjectPool(PoolableObjectFactory factory, int maxActive, byte whenExhaustedAction, long maxWait) GenericObjectPool(PoolableObjectFactory factory, int maxActive, byte whenExhaustedAction, long maxWait, boolean testOnBorrow, boolean testOnReturn) GenericObjectPool(PoolableObjectFactory factory, int maxActive, byte whenExhaustedAction, long maxWait, int maxIdle) GenericObjectPool(PoolableObjectFactory factory, int maxActive, byte whenExhaustedAction, long maxWait, int maxIdle, boolean testOnBorrow, boolean testOnReturn) 这种对象池不可以在没有Jakarta Commmons Collections组件支持的情况下运行。
int maxActive int maxIdle long maxWait long minEvictableIdleTimeMillis int numTestsPerEvictionRun boolean testOnBorrow boolean testOnReturn boolean testWhileIdle long timeBetweenEvictionRunsMillis byte whenExhaustedAction 这些字段的作用,与在GenericKeyedObjectPool最复杂的构造方法中与它们同名的参数完全相同。
Martin Fowler在 《Refactoring -- Improving the Design of Existing Code》(中译本名为《重构??改善既有代码的设计》,由侯捷、熊节合译)一书的第三章《代码的坏味道(Bad Smells in Code)》中讨论了被称为“Long Parameter List”和“Data Class”的“坏味道”。并指明了一些可以用于对付这些问题的重构手法。
Brian Goetz在IBM developerWorks上发表的《Java 理论与实践:描绘线程安全性》一文中,说明了为什么单纯地使用同步方法还不能让对象就此在多线程环境里高枕无忧的原因。
Dr. Cliff Click发表在JavaOne 2003上的《Performance Myths Exposed》(session #1522),给出了一组包括“对象池化”在内的、对“能提高Java程序性能”的做法的实际效果的测试数据,和一些恰当使用这些做法的建议。