它怎麼一回事熱點的兩種口味的調整:
相關答案:Real differences between "java -server" and "java -client"?
順便說一句,它是運行客戶端和服務器模式是相同的熱點JVM。 AFAIK,不同之處在於兩種模式選擇不同的默認JVM調整/配置參數。
所以,第一個問題是「爲什麼它比客戶端虛擬機慢」
我不知道。
也許客戶端模式可以實現特定的優化,這真的有助於這個(高度人爲的)基準測試。或者,其中一種服務器模式優化實際上是針對此(高度人爲)基準的反優化。如果您真的想知道,請讓JIT編譯器轉儲本機代碼並詳細分析它。 (但我認爲這是浪費時間。)
而且我想下一個問題是「是有可能得到的是超級0毫秒加速比方法調用的方式(這是幾乎相同的代碼)?」
這很簡單。優化器已經發現方法調用不會影響其他任何內容,並且已經優化了該呼叫。循環可以被優化掉。
此外,我認爲,儘管這種怪異,熱點一般跑得快得多,即使有,比如說,匿名類等?
我不認爲你應該推定任何東西。
但是,我也不認爲你的微基準測試對真實程序有任何意義。微基準通常會導致誤導,並且你的是有缺陷的(例如,被優化掉的循環),而且似乎沒有測試一個典型的(寫得很好的)Java程序會做的事情。
如果您真的關心兩種HotSpot模式的相對性能,您應該運行並衡量應用程序在實際數據上的性能。
......爲什麼服務器JVM會選擇一些看起來更糟糕的東西?
優化器旨在優化真正的程序...不是微型基準,他們花時間做奇怪的事情,不會與有用的計算有任何相似之處。並非所有優化在所有情況下都是有益的,並且您可能遇到某種邊緣情況。
但是,這隻有在您看到實際應用程序中發生同樣的事情時才相關。
最後,你不提供任何關於JVM版本,平臺和硬件的細節。這些可能會對相對績效衡量標準產生巨大影響。
相關:http://stackoverflow.com/questions/2423203/server-option-for-java-exe – finnw 2011-05-24 00:53:15