Оправдывает ли порядок коробок на скорость?

Я попытался это сделать Google, но не повезло.

У меня очень большой переключатель, и некоторые случаи, очевидно, более распространены, чем другие.

Итак, я хотел бы знать, действительно ли порядок действительно соблюден, и "верхние" случаи проверяются до "нижнего", поэтому их оценивают быстрее.

Я хотел бы сохранить свой заказ, но если он наносит вред скорости, то переупорядочение ветвей было бы хорошей идеей.

Для иллюстрации:

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

Ответ 1

Переупорядочение оператора switch не имеет никакого эффекта.

Глядя на спецификацию байт-кода Java, switch можно скомпилировать в команду lookupswitch или tableswitch, включив int. A lookupswitch всегда скомпилирован с возможными значениями в отсортированном порядке, поэтому переупорядочение констант в коде не имеет значения, а tableswitch просто имеет массив возможных скачков относительно заданного смещения, поэтому он тоже, никогда не заботится о первоначальном порядке.

Смотрите http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.lookupswitch и http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.tableswitch для подробности.