关于对commons-pool组建的应用问题
下载commons-pool在这里:http://commons.apache.org/pool/download_pool.cgi
最近几天在做一个网络连接处理,之前考虑的是clone的方式产生对象来处理会话,这个当然不行了,于是就着手采用对象池的技术来解决问题
ObjectPool 定义了池相关操作的接口
GenericObjectPool 提供了后进先出(LIFO)与先进先出(FIFO)两种行为模式的池。默认情况是采用后进先出,即当有空闲对象时,调用borrowObject方法,返回最近时刻放进去的那个实例对象。这个行为是通过lifo这个属性控制的。
StackObjectPool 采用后进先出行为模式的池。(栈的特点,学过数据结构的都懂的)
SoftReferenceObjectPool 采用后进先出行为模式的池。池内对象被SoftReference包裹,允许垃圾回收器在有内存需要的时候删除这部分对象。
研究了下源码,GenericObjectPool 比较的复杂,另外应用实际的项目的话,除了搞好一些线程安全的问题(本身comons-pool也不是绝对的线程安全--相容的,为什么就看我另一批博客)一些参数的配置,要花时间去测试,所以就不考虑,StackObjectPool 接口实现的池,自身对对象有维护,在stack中,相比SoftReferenceObjectPool ,软引用,初始化一定数量,不够自动在heap取增加,内存不够,还有gc,重点就在这,有gc的辅助,现代gc本身也应该是相当的强大的,至于为啥呢么,有兴趣的javaer可以看下jvm的内存管理这方面的东西。
有兴趣的朋友一起讨论