jdk内部对象池有三个,接口为ObjectPool
GenericObjectPool
StackObjectPool
SoftReferenceObjectPool
带有可以的对象池
StackKeyObjectPool
GenericKeyObjectPool
对应对象池的对象池工厂,接口为PoolableObjectPool
BasePoolableObjectFactory 基本对象池方法
package com.test.objPool;
import java.util.NoSuchElementException;
import org.apache.tomcat.dbcp.pool.ObjectPool;
import org.apache.tomcat.dbcp.pool.impl.StackObjectPool;
import com.test.objPool.ObjectPoolableFactory.oneObject;
public class TestForObjPool {
public static void main(String[] args)
{
ObjectPool pool = new StackObjectPool(new ObjectPoolableFactory());
try {
for(int i=0;i<10;i++)
{
oneObject user = (oneObject)pool.borrowObject();
user.name = "Borned";
user.sayMyName();
oneObject user2 = (oneObject)pool.borrowObject();
user2.name="Borned2222";
user2.sayMyName();
pool.returnObject(user);
oneObject user3 = (oneObject)pool.borrowObject();
user3.name="Borned3333";
user3.sayMyName();
pool.returnObject(user2);
pool.returnObject(user3);
}
} catch (NoSuchElementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.test.objPool;
import org.apache.tomcat.dbcp.pool.BasePoolableObjectFactory;
public class ObjectPoolableFactory extends BasePoolableObjectFactory{
int i=0;
@Override
public Object makeObject() throws Exception {
// TODO Auto-generated method stub
System.out.println("===================="+i);
return new oneObject();
}
public void passivateObject(Object one)
{
oneObject oObj = (oneObject)one;
oObj.clear();
}
class oneObject
{
int num = ++i;
String name = "";
void sayMyName()
{
System.out.println(i+" "+num+"((((((((("+name+")))))))))");
}
public oneObject()
{
System.out.println("--start---generate a object");
System.out.println(num);
System.out.println("--end----------------------");
}
public void clear()
{
name = "";
System.out.println("%%%%%%%retrive%%%%%%%%%%");
}
}
}
分享到:
相关推荐
Android 对象池 谨慎和智能地使用系统资源对 Android 来说至关重要。 过度消耗堆内存会带来OutOfMemory异常和无数次遇到垃圾收集器(GC)。 GC会占用 UI 线程的宝贵时间,并且会导致丢弃 UI 帧,从而提供糟糕的用户...
Unity 轻量高效对象池插件 // // 摘要: // 首次加载是否完成 public static bool firstPreloadFinish { get; } // // 摘要: // 获取实例 public static EasyObjectPool GetInstance(); // // 摘要: //...
对象池通用对象池,可用于池任何类型的资源。
冷热分离: 运行时内存实时预览 编辑模式下可以更轻松的配置初始化预加载的内容 ...支持 常规对象池管理 支持 自动动态扩展 Document: https://blog.csdn.net/qq_39162566/article/details/129259017
最简单高效的JAVA对象池、线程池、以及使用对象池技术实现的数据库连接池 已在生产运行5年以上的代码 若有任何问题请与我联系
因此,从池中删除对象时,在将对象放回之前,该对象在池中不可用。 组对象具有生命周期: 创建验证销毁。 顺序图 优势 提供显着的性能提升。 管理您的连接,并提供一种重用和共享它们的方式。 当类的实例的初始化...
对象池通过对象复用的方式来避免重复创建对象,它会事先创建一定数量的对象放到池中,当用户需要创建对象的时候,直接从对象池中获取即可,用完对象之后再放回到对象池中,以便复用。这种方式避免了重复创建耗时或耗...
MyDotey对象池 MyDotey ObjectPool,一个通用的对象池,基于ConcurrentHashMap&BlockingQueue的实现,易于使用。 分别在java / dotnet中实现。 代码是干净的。 易于阅读。 ThreadPool和AutoScaleThreadPool也是基于...
一、对象池 运用对象池化技术可以显著地提升性能,尤其是当对象的初始化过程代价较大或者频率较高。下面是ObjectPool源码中涉及的几个类。当你看过.Net Core源码很多时,你会发现,微软的开发很多都是这种模式,...
还记得JeffryRichter在《Appiled.NETFrameworkProgramming》里的那个利用对象复苏设计的那个对象池吗?且请容许我把代码在这里再贴一遍: 1using System; 2 3using System.Collections; 4 5
对象池分级管理,可以创建对象池,缓存池,缓式加载。
ObjectPool_v1.0
Go Commons Pool是用于的通用对象池,可以直接从重写。 特征 支持自定义 。 丰富的池配置选项,可以精确控制池对象的生命周期。 参见 。 池LIFO(后进先出)或FIFO(先进先出) 池盖配置 池对象验证配置 池对象...
对象池-2 用于异步回收对象分配的构造函数特定对象池实现。 安装 npm install object-pool-2 --save 用法 var objectPool = require('object-pool-2')(Constructor); 创建一个新的对象池。 接受一个将在内部使用...
一个完美的对象池工具,完美封装的了一键生成对象,卸载,回收等功能,是以ObjectPoolManager管理所有的对象池,以对象名称命名的对象池管理该对象的所有对象,且使用了发消息机制,封装了可以对象生成和回收的作...
ObjectPool_v1.1.zip
Unity对象池,减少直接销毁产生的内存消耗,降低DrawCall
演示了如果您的对象需要从一个Factory构造,或当你的对象是用Emit生成时,如何简单继承ObjectPool类,实现特殊的对象的池化操作。
简介 tinyToolkit是为减少编码工作而封装的简易工具套件,可单独提取二进制嵌入项目代码中,最低支持c ++ 11 依赖 fmtlib 安装 如若自动编译,可运行脚本目录下各平台...objectPool对象池 util(实用工具) math数学处