В настоящее время я использую оператор switch для обработки типов входящих сообщений, для которых существует около 20 различных случаев. Некоторые из этих случаев на несколько порядков более вероятны, чем другие.
Может ли компилятор горячей точки оптимизировать порядок изучения случаев, чтобы найти правильный вариант выполнения, или я должен структурировать свой код так, чтобы самые распространенные случаи появлялись первыми:
switch(messageType)
{
case MOST_COMMON:
// handle it
break;
...
case LEAST_COMMON:
// handle it
break;
}
Все случаи являются взаимоисключающими.
Будет ли лучше использовать шаблон стратегии и поиск по карте для типа сообщений?
Производительность является ключевой проблемой, так как я обрабатываю тысячи сообщений в секунду и пытаюсь сократить затраты на создание объектов и вызовы методов.
Большое спасибо,
Chris
Edit:
Спасибо за указатели.
messageType - это int с узким диапазоном значений, поэтому похоже, что он будет компилироваться в байт-код «TableSwitch», поэтому нет необходимости переупорядочивать регистры.
Соответствующая часть спецификации JVM находится здесь http://java.sun.com/docs/books/jvms/second_edition/html/Compiling.doc.html#14942