Actualmente estoy usando una instrucción switch para manejar tipos de mensajes entrantes de los cuales hay 20 o más casos diferentes. Algunos de estos casos son órdenes de magnitud más probables que otros.¿Optimización de la declaración de cambio de Java con muchos casos?
es el compilador de punto de acceso capaz de optimizar el fin de examinar los casos para encontrar la manera correcta para ejecutar o debo estructurar mi código para que los casos más comunes aparecen en primer lugar:
switch(messageType)
{
case MOST_COMMON:
// handle it
break;
...
case LEAST_COMMON:
// handle it
break;
}
Todos los casos son mutuamente excluyentes .
¿Sería mejor utilizar el patrón de estrategia y una búsqueda de mapa en el tipo de mensaje?
El rendimiento es la principal preocupación, ya que estoy manejando miles de mensajes por segundo y estoy tratando de reducir la creación de objetos y la sobrecarga de llamadas a métodos.
Muchas gracias,
Chris
Editar: Gracias por los punteros. messageType es un int con un rango estrecho de valores, por lo que parece que se compilará con el bytecode "tableswitch", por lo que no es necesario reordenar los casos.
parte pertinente del especificación JVM está aquí http://java.sun.com/docs/books/jvms/second_edition/html/Compiling.doc.html#14942
La mayoría de los compiladores de IIRC manejan sentencias 'switch' en C y C++ con tablas de búsqueda. Java podría hacer lo mismo. Pero podría estar equivocado. – NullUserException
posible duplicado de [Java: If vs. Switch] (http://stackoverflow.com/questions/1061101/java-if-vs-switch) –
El JIT * debe * optimizar la ruta durante la ejecución. Diseñaría ambos mecanismos para ver con certeza. –