java thèse Est-ce que l'ordre de basculement affecte la vitesse?



thèse doctorat big data pdf (1)

La réorganisation d'une instruction switch n'a aucun effet.

En regardant la spécification bytecode Java, un switch peut soit être compilé vers un lookupswitch ou une instruction de tableswitch , en allumant un int . Un lookupswitch est toujours compilé avec les valeurs possibles dans l'ordre trié, donc réordonner les constantes dans le code n'aura jamais d'importance, et un tableswitch juste un tableau des sauts possibles par rapport à un offset spécifié, donc, aussi, ne se soucie jamais du commande originale.

Voir http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.lookupswitch et http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.tableswitch pour plus de détails.

Cette question a déjà une réponse ici:

J'ai essayé de google ceci, mais n'ai eu aucune chance.

J'ai un très gros changement, et certains cas sont évidemment plus communs que d'autres.

Je voudrais donc savoir si la commande est vraiment maintenue telle quelle et si les cas "supérieurs" sont testés avant les "inférieurs", donc évalués plus rapidement.

Je voudrais garder ma commande, mais si ça blesse la vitesse, alors réorganiser les branches serait une bonne idée.

Pour illustration:

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




switch-statement