首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >业绩增长?

业绩增长?
EN

Stack Overflow用户
提问于 2015-04-04 13:04:36
回答 1查看 156关注 0票数 0

假设我有以下switch语句:

代码语言:javascript
复制
switch (i)
{
    case 0: ...; return ...;
    case 1: ...; return ...;
    case 2: ...; return ...;
    case 400: ...; return ...;
    case 401: ...; return ...;
    case 402: ...; return ...;
}

由于这些差距太大,编译器无法在这里生成合理的TABLESWITCH (O(1)复杂性)指令,所以它使用了LOOKUPSWITCH (O(log n)复杂性)。是否可以通过将switch分成以下两部分来提高此代码的性能:

代码语言:javascript
复制
switch (i)
{
    case 0: ...; return ...;
    case 1: ...; return ...;
    case 2: ...; return ...;
}

switch (i)
{
    case 400: ...; return ...;
    case 401: ...; return ...;
    case 402: ...; return ...;
}

这将导致编译器生成两个TABLESWITCH而不是一个LOOKUPSWITCH

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-04 13:35:40

不要花太多时间来优化字节码。字节码不一定反映JIT编译方法的性能。为什么不自己拿JMH来检查这两种情况的实际性能呢?

事实上,HotSpot C2编译器以类似的方式对待tableswitchlookupswitch,并且它很好地处理了带有间隔的顺序标签的lookupswitch

这两种情况都以二进制搜索的方式转换成一系列比较和条件跳转指令,在性能上几乎是相同的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29446748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档