大方法的執行性能與調優過程

使用”-XX:-DontCompileHugeMethods”解除大方法的編譯限制,一個比較明顯的缺點是JVM會嘗試編譯所遇到的所有大方法,者會使JIT編譯任務負擔更重,而且需要佔用更多的Code Cache區域去保存編譯後的代碼。但是優點是編譯後可以讓大方法的執行速度變快,且可能提高GC速度。運行時Code Cache的使用量可以通過JMX或者JConsole獲得,Code Cache的大小在globals.hpp中定義:

 

 


define_pd_global(intx, ReservedCodeCacheSize, 48M);
product_pd(uintx, InitialCodeCacheSize, “Initial code cache size (in bytes)”)
product_pd(uintx, ReservedCodeCacheSize, “Reserved code cache size (in bytes) - maximum code cache size”)
product(uintx, CodeCacheMinimumFreeSpace, 500
K, “When less than X space left, we stop compiling.”)

一旦Code Cache滿了,HotSpot會停止所有後續的編譯任務,雖然已編譯的代碼不受影響,但是後面的所有方法都會強制停留在純解釋模式。因此,如非必要,應該儘量避免生成大方法;如果解除了大方法的編譯限制,則要留意配置Code Cache區的大小,準備更多空間存放編譯後的代碼。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章