2010-09-24 73 views
1

想象一個(容器)應用程序正在創建多個類加載器來承載一些其他/子應用程序。如果一個類由不同的類加載器加載,(sun-jvm)熱點優化是否會多次發生?

容器應用程序有一個-say-root類加載器。每次加載子應用程序時,容器都會爲此應用程序創建一個新的類加載器。

一些子應用程序使用相同的類,但它們沒有被容器的類加載器加載,所以每個子應用程序(更好:它的類加載器)都加載了代碼。 A級。因此,Permspace將被填充兩次:一次爲子應用程序#1,一次爲子應用程序#2。

這對sun的熱點優化意味着什麼?
相同的優化是否會在類A上發生兩次,每次類加載器都會發生一次?
或者,是否有一些內置的「魔術」可以避免這種情況? (優化完成一次)
有人知道鏈接,這是解釋?

我指的是太陽(服務器)VM航運與JDK 1.6

回答

0

我沒有,我可以指出你爲了證明這一點任何文學,但我可以從經驗告訴你,如果你的類正在重新加載,你的方法將被重新編譯並重新優化。您可以通過添加以下內容來觀察:

-XX:+PrintCompilation 

到Java命令行並執行您的應用程序。這會告訴你究竟正在編譯什麼方法。如果你看到相同的方法輸出兩次,你知道它正在重新編譯。如果您不確定您的課程是否正在重新加載,請添加:

-verbose:class 

。這將向您顯示所有班級負載事件。

+0

謝謝你的回答 - 我缺乏你的經驗:)。不過,我會嘗試您提供的jvm開關。 – MartinK 2010-09-24 17:15:10

+0

使用這些開關,您可以進行自己的測試來檢查HotSpot的行爲。並且請回報您的發現! ;-) – 2010-09-24 17:36:30

+0

@Neeme:你猜怎麼着?我做到了!我創建了一個博客!參見:http://growninthewild.blogspot.com/2010/09/java-virtual-machine-hotspot.html – MartinK 2010-09-24 22:18:27

0

它必須。不能保證第二個類加載器加載了與第一個類加載器相同的字節碼。

相關問題