Obecnie używam instrukcji switch do obsługi typów wiadomości przychodzących, których jest około 20 różnych przypadków. Niektóre z tych przypadków są o rząd wielkości bardziej prawdopodobne niż inne.Optymalizacja instrukcji przełączania Java w wielu przypadkach?
Czy kompilator hotspot w stanie zoptymalizować kolejność rozpatrywania spraw, aby znaleźć właściwą sprawę do wykonania lub powinna wyglądać struktura kodu tak, że najczęstsze przypadki pojawiają się pierwsze:
switch(messageType)
{
case MOST_COMMON:
// handle it
break;
...
case LEAST_COMMON:
// handle it
break;
}
Wszystkie przypadki są wzajemnie się wykluczają .
Czy mogę lepiej wykorzystać wzorzec strategii i wyszukiwanie mapy dla typu wiadomości?
Wydajność jest kluczową kwestią, ponieważ obsługuję tysiące wiadomości na sekundę i próbuję zmniejszyć nakłady związane z tworzeniem obiektów i wywołaniem metody.
Dziękujemy,
Chris
Edit: Dzięki za wskazówki. messageType jest int z wąskim zakresem wartości, więc wygląda na to, że skompiluje kod bajtowy "tableswitch", więc nie trzeba zmieniać kolejności przypadków.
odpowiedniej części specyfikacji JVM jest tutaj http://java.sun.com/docs/books/jvms/second_edition/html/Compiling.doc.html#14942
Większość kompilatorów IIRC obsługuje instrukcje 'switch' w C i C++ z tablicami odnośników. Java może zrobić to samo. Ale mogę się mylić. – NullUserException
możliwy duplikat [Java: If vs. Switch] (http://stackoverflow.com/questions/1061101/java-if-vs-switch) –
JIT * powinien * optymalizować ścieżkę podczas wykonywania. Zaryzykowałbym oba mechanizmy, aby zobaczyć na pewno. –