2010-02-18 53 views
0

我有一個核心JAR,它提供了一些功能,因此也用於許多其他應用程序 - 桌面應用程序,Web應用程序等。現在,此核心JAR維護一個包含計算對象的對象池昂貴的創造。對象池的大小是固定的,因此我一次創建所有對象並填充池。 我想要做的是每當使用我的JAR的應用程序被加載時,創建對象池時應用程序不知道這種池的細節。而且即使應用加載時間因爲游泳池數量而受到打擊,但是一旦應用已經過了這個階段,那麼稍後在創建這樣的重物時就不應該有更多的性能影響。在JAR負載上填充對象池

有沒有辦法做到這一點?

回答

4

除了在客戶端應用程序中添加明確的鉤子來調用啓動邏輯之外,執行此類操作的唯一方法是將靜態初始化程序添加到您的類中以構建您的池。

當您的類首次被JVM加載時(在您的類中的任何代碼被調用之前)運行時,會運行一個靜態初始化程序,這不是非常確定的,但通常是在第一次打開引用您的類的代碼路徑時。

我建議在啓動邏輯中爲客戶端應用程序調用某種鉤子,這樣他們可以精確地控制這種類型的事情,而不是讓您的啓動邏輯在不可預知的時間運行。

+0

+1對於最終的推薦 – 2010-02-18 04:20:32

+0

你也可以這樣懶惰地使用靜態池的單例模式。第一次調用依賴它的方法時,可以填充該池。 – andersoj 2010-10-15 16:55:08