Pertanyaan Apakah urutan tombol switch mempengaruhi kecepatan? [duplikat]


Pertanyaan ini sudah memiliki jawaban di sini:

Saya sudah mencoba google ini, tetapi tidak berhasil.

Saya memiliki saklar yang sangat besar, dan beberapa kasus jelas lebih umum dari yang lain.

Jadi saya ingin tahu apakah pesanan benar-benar diadakan sebagaimana adanya dan kasus "atas" diuji sebelum "lebih rendah", oleh karena itu dievaluasi lebih cepat.

Saya ingin mempertahankan pesanan saya, tetapi jika itu merusak kecepatan, menata kembali cabang-cabang itu akan menjadi ide yang bagus.

Untuk ilustrasi:

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


asal


Jawaban:


Menyusun ulang pernyataan switch tidak memiliki efek apa pun.

Melihat spesifikasi bytecode Java, a switch dapat dikompilasi menjadi a lookupswitch atau a tableswitch instruksi, menyalakan int. SEBUAH lookupswitch selalu dikompilasi dengan nilai-nilai yang mungkin dalam urutan terurut, sehingga penataan kembali konstanta dalam kode tidak akan menjadi masalah, dan a tableswitch hanya memiliki larik kemungkinan lompatan relatif terhadap offset yang ditentukan, sehingga juga tidak pernah peduli dengan orde asli.

Lihat http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.lookupswitch dan http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.tableswitch untuk detailnya.


109
2018-04-21 19:50