对象池管理器

对象池管理器控制应用程序对象和开发工具箱 (Developer Kit) 对象的复用,如 Vectors 和 HashMaps。

可以在一个 Application Server 单元中创建多个对象池管理器。每个对象池管理器具有唯一的单元范围的 Java™ 命名和目录接口 (JNDI) 名称。应用程序可通过执行使用 JNDI 名称的 JNDI 查找来查找特定对象池管理器。

对象池管理器及其关联的对象实现下列接口:
public interface ObjectPoolManager
{
		ObjectPool getPool(Class aClass)
				throws InstantiationException, IllegalAccessException;
		ObjectPool createFastPool(Class aClass)
				throws InstantiationException, IllegalAccessException;
		
}

public interface ObjectPool
{
		Object getObject();
		void returnObject(Object o);
	
}

getObject() 方法从对象池中移除对象。如果对 getObject() 进行了调用,而池为空,那么将创建同一种类型的对象。returnObject() 调用将对象放回至对象池。如果未调用 returnObject(),那么不再能够从对象池分配该对象。如果对象未返回至对象池,那么会将对象作为垃圾来回收。

每个对象池管理器可用于合用具有下列特征的任何 Java 对象:
  • 此对象必须是具有公用缺省构造函数的公用类。
  • 如果对象实现 java.util.Collection 接口,那么它必须支持可选的 clear() 方法。

每个共享对象类必须具有其自己的对象池。另外,应用程序使用 ObjectPoolManager.getPool() 方法或 ObjectPoolManager.createFastPool() 方法获取特定对象的对象池。这些方法的不同在于 getPool() 方法返回可跨多个线程共享的池。createFastPool() 方法返回只能由单个线程使用的池。

如果在 Java 虚拟机 (JVM) 中,为单个类多次调用 getPool() 方法,会返回相同的池。当调用 createFastPool() 方法时,为每次调用返回一个新的池。基本上,getPool() 方法返回线程同步的池。

由于需要处理线程同步,所以多个线程使用的池比快速池略微慢一点。但是,在使用快速池时要特别谨慎。

考虑下列接口:
public interface PoolableObject 
{
		void init();
		void returned();
}

如果放入此池的对象实现此接口,并调用 ObjectPool.getObject() 方法,那么此池分布的对象调用 init() 方法。当调用 ObjectPool.returnObject() 方法时,在对象返回对象池前,对其调用 PoolableObject.returned() 方法。使用此方法对象可预初始化或清除。

对象不是总是可能实现 PoolableObject。例如,应用程序可能要合用 ArrayList 对象。每次应用程序复用 ArrayList 对象时,都需要清除它。应用程序可能扩展 ArrayList 对象,并使 ArrayList 对象实现可合用的对象。例如,考虑下列部分:
public class PooledArrayList extends ArrayList implements PoolableObject 
{
		public PooledArrayList()
	{
	}
	
		public void init() {
	}

		public void returned() 
	{
				clear();
	}
}

如果应用程序使用此对象,代替为真的 ArrayList 对象,那么 ArrayList 对象在返回池时,自动清除。

清除 ArrayList 对象只须使它为空,但是不释放数组后备 ArrayList 对象。因此,当应用程序复用 ArrayList 时,后备数组不断扩展,直到它足够用于所有应用程序需求。当达到此点时,应用程序停止分配和复制新的后备数组,并实现最好的性能。

不可能或不期望使用先前的步骤。另一个可选方法是实现定制对象池,并使用对象池管理器作为用于此类型类的池来注册此池。当在单元中定义对象池管理器时,WebSphere® 管理员注册此类。注意,这些类打包在 Java 归档 (JAR) 文件中,此 JAR 文件在可能使用它们的单元中的所有节点上提供。


指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=casb_objectmanagers
文件名:casb_objectmanagers.html