2009-07-19 80 views
5

是否可以在Java中實現多線程類加載器?在一個元驅動框架中,我需要提前加載幾百個類,即不像系統類加載器那樣延遲。爲了加速這一點,我想更好地利用當前的多核CPU。在我深入研究之前,如果有人在這個問題上已經有一些經驗,或者如果可能完全清楚,或許defineClass()是這種情況下的瓶頸,我會感興趣。多線程類加載可能嗎?

感謝 安德烈

回答

6

我相信目前你會打一個獨家鎖。在JDK7中,類加載器將能夠將自己標記爲可並行。

和往常一樣,我建議可能要做一些後端計算,然後吸引它。

0

有沒有錯具有一個或多個線程在需要你需要預加載的所有類的後臺加載的類。用Executor和Callables做一個原型,這樣你就可以用jvisualvm獲得一些分析信息。

+1

從技術上講,應該可以有多個線程加載類,這很清楚。 defineClass()方法不同步,這是一個先決條件。但是我想知道JVM代碼中是否有一個更深的同步點,可以防止真正的MT類加載,而不會顯而易見? – 2009-07-19 17:38:50

+1

defineClass不同步,因爲類加載被JVM定義爲單線程。 (至少在Java 5和Java 6中)幾百個類不需要那麼長時間就可以加載需要加載的時間段? – 2009-07-19 19:03:38