Pregunta ¿Cambia el orden de las cajas a la velocidad? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Intenté googlear esto, pero no tuve suerte.

Tengo un cambio muy grande, y algunos casos son obviamente más común que otros.

Así que me gustaría saber si la orden realmente se mantiene tal como está y si los casos "superiores" se prueban antes que los "inferiores", por lo tanto se evalúan más rápido.

Me gustaría mantener mi orden, pero si duele la velocidad, entonces volver a ordenar las ramas sería una buena idea.

Por ilustracion:

switch (mark) {
        case Ion.NULL:
            return null;

        case Ion.BOOLEAN:
            return readBoolean();

        case Ion.BYTE:
            return readByte();

        case Ion.CHAR:
            return readChar();

        case Ion.SHORT:
            return readShort();

        case Ion.INT:
            return readInt();

        case Ion.LONG:
            return readLong();

        case Ion.FLOAT:
            return readFloat();

        case Ion.DOUBLE:
            return readDouble();

        case Ion.STRING:
            return readString();

        case Ion.BOOLEAN_ARRAY:
            return readBooleans();

        case Ion.BYTE_ARRAY:
            return readBytes();

        case Ion.CHAR_ARRAY:
            return readChars();

        case Ion.SHORT_ARRAY:
            return readShorts();

        case Ion.INT_ARRAY:
            return readInts();

        case Ion.LONG_ARRAY:
            return readLongs();

        case Ion.FLOAT_ARRAY:
            return readFloats();

        case Ion.DOUBLE_ARRAY:
            return readDoubles();

        case Ion.STRING_ARRAY:
            return readStrings();

        default:
            throw new CorruptedDataException("Invalid mark: " + mark);
    }

76
2018-04-21 19:36


origen


Respuestas:


Reordenar una declaración de cambio no tiene ningún efecto.

En cuanto a la especificación de bytecode de Java, una switch puede ser compilado a lookupswitch o una tableswitch instrucción, encender un int. UN lookupswitch siempre se compila con los valores posibles en orden, por lo que volver a ordenar las constantes en el código nunca importará, y un tableswitch solo tiene una matriz de posibles saltos en relación con un desplazamiento especificado, por lo que tampoco le importa el orden original.

Ver http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.lookupswitch y http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.tableswitch para detalles.


109
2018-04-21 19:50