2013-01-23 24 views
4

我在一臺Linux機器上並使用openjdk7。在使用-server選項時,發現我的代碼執行速度提高了兩倍,我深入研究了虛擬機內部發生的事情,發現服務器虛擬機像瘋了一樣嵌入我的代碼,而客戶機虛擬機根本不內聯。客戶端VM未內聯?

這是正常的行爲嗎?

+1

Server VM期望程序運行時間很長,因此可以執行更復雜的優化。通常使用服務器虛擬機很有用,但內聯可能會導致更多的內存消耗。 – MrSmith42

+0

如果您正在尋找改變JVM運行模式的方法,您還需要確保您瞭解在多線程應用程序中對可見性的潛在影響,因爲由於策略差異導致交換機可能產生意想不到的後果模式之間的操作。 – codeghost

+0

爲了更深入地理解差異,你可以看看http://stackoverflow.com/questions/198577/real-differences-between-java-server-and-java-client – Taky

回答

3

這是正常行爲。

服務器JVM更加嚴格地優化代碼。這在啓動時使用更多CPU,運行時使用更多內存。

客戶端VM被設計爲快速啓動例如小程序。這是Windows 32位JVM上的默認值。

+1

所以客戶端虛擬機根本不內聯?如果-server是默認的,爲什麼我會看到差異? (我沒有指定我想要的客戶端虛擬機) – kutschkem

+0

好吧我想通了,我的Java虛擬機默認爲-client出於某種原因。 – kutschkem

+1

這可能有所幫助http://www.kynosarges.org/JavaClientVm.html –