当前位置: 首页 > 面试题库 >

开关盒顺序是否会影响速度?

柳轶
2023-03-14
问题内容

我试图用谷歌搜索,但是没有运气。

我的开关很大,有些情况 显然 比其他情况 更常见

因此,我想知道订单是否真正保持原状,并且在“下”之前先测试“上”案例,因此可以更快地进行评估。

我想保留订单,但是如果它影响速度,那么重新排序分支将是一个好主意。

例如:

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语句重新排序没有任何效果。

查看Java字节码规范,switch可以将a编译为a lookupswitch或一条tableswitch指令,然后打开a int。A
lookupswitch总是以可能的值以已排序的顺序进行编译,因此对代码中的常数进行重新排序将无关紧要,而tableswitchjust则具有相对于指定偏移量的可能跳转数组,因此,它也不必关心原始顺序。

请参阅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
了解详情。



 类似资料:
  • 我试图谷歌这个,但运气不好。 我有一个很大的转变,有些病例明显比其他病例更常见。 所以我想知道订单是否真的保持原样,并且“上层”案例在“下层”案例之前得到测试,因此评估得更快。 我想保留我的订单,但如果这会影响速度,那么重新排序分支将是一个好主意。 举例说明:

  • 问题内容: 假设我有一个漫长而昂贵的查询,里面挤满了条件,搜索了大量的行。我还有一个特殊条件,例如公司ID,它将限制需要大量搜索的行数,将其范围从数十万缩小到几十。 我这样做是否会对MySQL性能产生任何影响: 或这个: 问题答案: 不,顺序应该不会有太大的不同。当发现哪些行与条件匹配时,将针对每一行检查整个条件(通过布尔逻辑组合的所有子条件)。 一些智能数据库引擎将尝试猜测条件的哪些部分可以更快

  • 问题内容: 如果我有两个查询 和 哪个查询将运行得更快?是where子句/表联接的最大因素,还是返回的列数最大? 我之所以问是因为我正在构建一系列映射到数据库表的对象。通常,每个对象将至少具有以下三种方法: 全选 选择足够的数量以用于填充下拉列表 -选择结果中可见的所有内容,通常约6列左右。 如果每个查询返回的列完全相同,则代码的维护和测试应该更加简单。数据库在任何给定的表中都不可能超过50,00

  • 问题内容: 在对bat Logic-2进行编码时,我在下面列出的第一个方法中输入了loneSum问题。对于所有测试,只有一个测试是正确的。它唯一失败的是所有变量都等于同一整数。但是,当我在线查找解决方案时,得到了下面列出的第二种方法,并且该方法行得通。我认为我的方法和正确的解决方案之间的唯一区别是“ else if(a == b && b == c){return 0;}”的位置。我的问题是条件的

  • 问题内容: 在对bat Logic-2进行编码时,我在下面列出的第一个方法中输入了loneSum问题。对于所有测试,只有一个测试是正确的。它唯一失败的是所有变量都等于同一整数。但是,当我在线查找解决方案时,得到了下面列出的第二种方法,并且该方法行得通。我认为我的方法和正确的解决方案之间的唯一区别是“ else if(a == b && b == c){return 0;}”的位置。我的问题是条件的

  • 没有控制台。登录大型for循环的每次迭代(假设我 换句话说,如果没有控制台,迭代会更快吗。日志 我不是问是否会有“任何”差异,但是否有明显的差异(比如10毫秒而不是1毫秒)? 在我的例子中,我谈论的是windows命令提示符和javascript