首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

地图 or switch

2014-01-09 
map or switch?也就是TableSwitch只要计算一次偏移量,立即就能到case执行,其时间复杂度为O(1)??LookupSwit

map or switch
?

也就是TableSwitch只要计算一次偏移量,立即就能到case执行,其时间复杂度为O(1)?

?

LookupSwitch

int chooseFar(int i) {
??? switch (i) {
??????? case -100: return -1;
??????? case 0:??? return? 0;
??????? case 100:? return? 1;
??????? default:?? return -1;
??? }
}

编译后:

Method int chooseFar(int)
0?? iload_1
1?? lookupswitch 3:
???????? -100: 36
??????????? 0: 38
????????? 100: 40
????? default: 42
36? iconst_m1
37? ireturn
38? iconst_0
39? ireturn
40? iconst_1
41? ireturn
42? iconst_m1
43? ireturn

?

也就是LookupSwitch编译后会保证其顺序,并采用二分法查找对应的case,其时间复杂度为O(log n)?

本机,全部预先执行1w次跳过jit的影响,采用map与switch各执行1亿次,执行时间是两位数的差距,map为400多ms,switch为5ms

?

当然测试的场景case都比较少,如果达到1k多个case条件呢? Jit还会把jvm指令缓存吗?,如果不缓存又是另外的情况了

大家可以把eclipse设置Xint,看看屏蔽jit后大量运行的效果

还有switch在什么场景下编译后会是TableSwitch,什么下会是LookupSwitch,毕竟两者的时间复杂度还是有差距

Java应用的性能,还是要详细分析其场景,至于要性能还是代码更优雅,要自己权衡了,呵呵,有更好的方案,还请分享哦

?

参考资料

?

http://stackoverflow.com/questions/10287700/difference-between-jvma-lookupswitch-and-tableswitch

?

http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-3.html#jvms-3.10

热点排行