80 votes

L'ordre des boîtiers de commutation influe-t-il sur la vitesse ?

J'ai essayé de chercher sur Google, mais sans succès.

J'ai un très gros interrupteur, et certaines affaires sont évidemment plus courante que d'autres.

Je voudrais donc savoir si l'ordre est vraiment maintenu tel quel et si les cas "supérieurs" sont testés avant les cas "inférieurs", donc évalués plus rapidement.

J'aimerais garder ma commande, mais si cela nuit à la rapidité, alors réorganiser les branches serait une bonne idée.

A titre d'exemple :

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);
    }

112voto

Louis Wasserman Points 67557

Le réordonnancement d'une instruction de commutation n'a aucun effet.

En regardant la spécification du bytecode de Java, une switch peut soit être compilé en un lookupswitch ou un tableswitch l'activation d'une int . A lookupswitch est toujours compilé avec les valeurs possibles dans l'ordre de tri, de sorte que le réordonnancement des constantes dans le code n'aura jamais d'importance, et un fichier tableswitch a juste un tableau des sauts possibles par rapport à un décalage spécifié, donc lui aussi ne se soucie jamais de l'ordre 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 pour les détails.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X