我目前使用一個switch語句來處理有20個左右不同情況的傳入消息的類型。其中一些情況比其他情況更可能發生數量級。在很多情況下優化Java switch語句?
是熱點編譯器能夠優化的案件進行審查,以找到正確的情況下執行的順序,或者我應該構建我的代碼,這樣,最常見的情況先出現:
switch(messageType)
{
case MOST_COMMON:
// handle it
break;
...
case LEAST_COMMON:
// handle it
break;
}
所有病例均互斥。
對於消息類型使用策略模式和Map查找會更好嗎?
性能是關鍵問題,因爲我每秒處理數千條消息,並試圖減少對象創建和方法調用開銷。
非常感謝,
克里斯
編輯: 謝謝你的指針。 messageType是一個int值,範圍很窄,因此看起來它會編譯爲「tableswitch」字節碼,因此不需要重新排序。 JVM規範的
相關部分在這裏http://java.sun.com/docs/books/jvms/second_edition/html/Compiling.doc.html#14942
IIRC大多數編譯器使用查找表處理C和C++中的'switch'語句。 Java可能會做同樣的事情。但我可能是錯的。 – NullUserException
[Java:If vs. Switch]的可能重複(http://stackoverflow.com/questions/1061101/java-if-vs-switch) –
JIT *應該*在執行過程中優化路徑。我會分析這兩種機制,以確定地看到。 –