物件池使用的基本思路是:將用過的物件儲存起來,等下一次需要這種物件的時候,再拿出來重複使用,從而在一定程度上減少頻繁建立物件所造成的開銷。 並非所有物件都適合拿來池化――因為維護物件池也要造成一定開銷。對生成時開銷不大的物件進行池化,反而可能會出現「維護物件池的開銷」大於「生成新物件的開銷」,從而使效能降低的情況。但是對於生成時開銷可觀的物件,池化技術就是提高效能的有效策略了。下面是構建物件池的乙個例子:
publicclass objectpool
/*** 建立乙個物件池**
*/public
synchronized
void createpool()
//建立儲存物件的向量 , 初始時有 0 個元素
objects = new vector();
//根據 numobjects 中設定的值,迴圈建立指定數目的物件
for (int x = 0; x < numobjects; x++)
}}
public
synchronized object getobject()
object conn = getfreeobject(); //
獲得乙個可用的物件
//如果目前沒有可以使用的物件,即所有的物件都在使用中
while (conn == null)
return conn;//
返回獲得的可用的物件
}
/*** 本函式從物件池物件 objects 中返回乙個可用的的物件,如果
* 當前沒有可用的物件,則建立幾個物件,並放入物件池中。
* 如果建立後,所有的物件都在使用中,則返回 null
*/private object getfreeobject()
}
return obj;
}
/*** 查詢物件池中所有的物件,查詢乙個可用的物件,
* 如果沒有可用的物件,返回 null
*/private object findfreeobject()
return obj;//
返回找到到的可用物件
}
/*** 此函式返回乙個物件到物件池中,並把此物件置為空閒。
* 所有使用物件池獲得的物件均應在不使用此物件時返回它。
*/public
void returnobject(object obj)
pooledobject pobj = null;
enumeration enumerate = objects.elements();
//遍歷物件池中的所有物件,找到這個要返回的物件物件
while (enumerate.hasmoreelements())
}
}
/*** 關閉物件池中所有的物件,並清空物件池。
*/public
synchronized
void closeobjectpool()
pooledobject pobj = null;
enumeration enumerate = objects.elements();
while (enumerate.hasmoreelements())
//從物件池向量中刪除它
objects.removeelement(pobj);
}
//置物件池為空
objects = null;
}
/*** 使程式等待給定的毫秒數
*/private
void wait(int mseconds)
catch (interruptedexception e)
}
/*** 內部使用的用於儲存物件池中物件的類。
* 此類中有兩個成員,乙個是物件,另乙個是指示此物件是否正在使用的標誌 。
*/class pooledobject
//返回此物件中的物件
public object getobject()
//設定此物件的,物件
public
void setobject(object objection)
//獲得物件物件是否忙
public
boolean isbusy()
//設定物件的物件正在忙
public
void setbusy(boolean busy)
}
}
測試類:
**如下:
public
class objectpooltest
}
Java物件池示例
物件池使用的基本思路是 將用過的物件儲存起來,等下一次需要這種物件的時候,再拿出來重複使用,從而在一定程度上減少頻繁建立物件所造成的開銷。並非所有物件都適合拿來池化 因為維護物件池也要造成一定開銷。對生成時開銷不大的物件進行池化,反而可能會出現 維護物件池的開銷 大於 生成新物件的開銷 從而使效能降...
java 通用物件池的實現
本文以apache common pools為例 pooledobject 可被池化的物件 預設實現defaultpooledobject,裡面封裝了乙個真正的使用者需要池化的物件object。其中defaultpooledobject裡面有兩個方法 exception borrowedby 用於記...
記憶體池實現示例
1.模板類定義 使用了模板以適應不同物件的記憶體需求,記憶體池中的記憶體塊則是以基於鍊錶的結構進行組織 static void operator delete void dp private static void memalloc cur 0 qdebug memalloc static unsi...