- 浏览: 374422 次
文章分类
最新评论
-
fishermen:
使用 <%@ page session="fa ...
Tomcat 的session管理 -
xinyiwust:
楼主你好!你总结的第一点:对于stateless的data s ...
Tomcat 的session管理 -
hujintao:
好像换成JDK目录后还是不行,比如HashMap这些类都不可以 ...
eclipse 调试 跟进 jdk -
顾小五:
是不是一般重写的方法,都有子类继承父类,就是 A extend ...
JAVA方法重载和方法重写 -
jhq986:
好用一定好评
lomboz插件下载
一直认为switch的效率高于if,特别对于条件大于3的时候,以前也貌似看过资料说:switch的查找类似二叉树,if的则是线性。
最近做了一个简单的测试,对有多个条件式的switch和if做比较,发现两者的效率几乎相同,if的效率甚至高于switch;<测试环境sun jdk6.1.13>
40个条件式的测试,测试1000 0000次,if耗时219ms, switch耗时234ms,平均都在4-5k/s;
30个条件式的测试,测试1000 0000次,if耗时188 switch耗时172平均都在5-6kw/s,
20个条件式,测试1000 0000次,if耗时109mswitch耗时125ms,平均在8-9kw/s
总结:
1 经过jdk的改进,目前switch和if的性能上差别微乎其微
2 条件式的多少对于一般应用的整体性能来说,影响也非常小。
3 影响效率的最大因子是条件式的数量,而非if或switch
测试代码
private static void testSitchAndIf(){ int testCount = 10000000; int flag = 0; Random random = new Random(testCount); int[] flags = new int[testCount]; for(int i = 0; i < testCount; i++){ flags[i] = random.nextInt() + 1; } // 先统一取一遍值,保证测试都用缓存值 for(int i = 0; i < testCount; i++){ flag = flags[i]; } long time1 = System.currentTimeMillis(); for(int i = 0; i < testCount; i++){ //flag = random.nextInt() + 1; flag = flags[i]; if(flag == 1){} else if(flag == 2){} else if(flag == 3){} else if(flag == 4){} else if(flag == 5){} else if(flag == 6){} else if(flag == 7){} else if(flag == 8){} else if(flag == 9){} else if(flag == 10){} else if(flag == 11){} else if(flag == 12){} else if(flag == 13){} else if(flag == 14){} else if(flag == 15){} else if(flag == 16){} else if(flag == 17){} else if(flag == 18){} else if(flag == 19){} else if(flag == 20){} else if(flag == 21){} else if(flag == 22){} else if(flag == 23){} else if(flag == 24){} else if(flag == 25){} else if(flag == 26){} else if(flag == 27){} else if(flag == 28){} else if(flag == 29){} else if(flag == 30){} // else if(flag == 31){} // else if(flag == 32){} // else if(flag == 33){} // else if(flag == 34){} // else if(flag == 35){} // else if(flag == 36){} // else if(flag == 37){} // else if(flag == 38){} // else if(flag == 39){} // else if(flag == 40){} } long time2 = System.currentTimeMillis(); for(int i = 0; i < testCount; i++){ flag = flags[i]; switch(flag){ case 1: break; case 2: break; case 3: break; case 4: break; case 5: break; case 6: break; case 7: break; case 8: break; case 9: break; case 10: break; case 11: break; case 12: break; case 13: break; case 14: break; case 15: break; case 16: break; case 17: break; case 18: break; case 19: break; case 20: break; case 21: break; case 22: break; case 23: break; case 24: break; case 25: break; case 26: break; case 27: break; case 28: break; case 29: break; case 30: break; // case 31: break; // case 32: break; // case 33: break; // case 34: break; // case 35: break; // case 36: break; // case 37: break; // case 38: break; // case 39: break; // case 40: break; // case 41: break; } } long time3 = System.currentTimeMillis(); System.out.println("loop count:" + testCount); System.out.println("if consume time:" + (time2 - time1) + ",avg:" + testCount / (time2 - time1) * 1000); System.out.println("switch consume time:" + (time3 - time2) + ",avg:" + testCount / (time3 - time2) * 1000); }
评论
2 楼
fishermen
2010-08-27
循环几十次,可计量时间短,而且样本数量也少,不容易看出实际效果。
1 楼
jarry-li
2010-08-23
楼主为什么不是循环几十次,if..else 有10 000 000次呢
发表评论
-
扩展列表
2013-05-30 16:15 9151 resources的获取方法 String re ... -
xml 构造及解析时的非法字符问题
2010-07-07 14:45 3450系统交互会用到xml,如果直接构造xml的字串,很 ... -
eclipse 调试 跟进 jdk
2009-08-12 09:49 3805突然发现用eclipse调试时不能跟进jdk的类 ... -
JavaScript to Java Communication
2009-05-18 18:51 1314对于应用程序,可以监听端口,构造协议,以实现特殊功能。 ... -
有关jsp/servlet的重定向技术综述[转载]
2007-07-02 15:00 2022有关jsp/servlet的重定向技术综述(2007-5-21 ... -
经典错误汇总!
2007-03-20 19:29 1830收集自己平日的错误,写出解决办法与要注意的地方,方便以后自己与 ... -
dom4jz之基础:XSL,XSLT,XPATH,XHTML,XML命名空间(网上搜集整理)
2007-03-10 10:59 2641整理到一块,方便自己与大家查阅 XHTML 介绍 XHTML ... -
面试点滴
2006-12-05 09:53 1548招工完毕,总结下,其他兄弟们继续努力^_^ 方正 第一次给了方 ... -
WAP技术
2006-11-28 18:33 2100WAP技术 手机上网是一个非常美好的梦想。为实 ... -
wap---介绍
2006-11-28 10:27 2379WAP WAP是Wirele ... -
eclipse3.1.2+lomboz开发j2ee程序与web应用---注意篇(2)
2006-11-27 20:16 2458还有些要注意的细节,特别说明下: ... -
eclipse+lomboz开发j2ee程序与web应用---配置(1)
2006-11-27 19:49 5798感谢每一位看到这篇文章的朋友,文章内容来自网络,请大家常来多 ... -
java面试笔试题大汇总
2006-11-24 15:54 7998java面试笔试题大汇总 JAVA相关基础知识 1、面向对象的 ... -
mustang,dolpin ---jdk
2006-11-13 22:50 1487news: Mustang、Dolpin更名JDK6、JDK ... -
JNDI介绍
2006-11-12 22:26 2790基于JNDI的应用开发 JNDI(The Java Nam ... -
Hibernate缓存
2006-10-31 22:39 1545缓存是介于应用程序和 ... -
Spring问答学习
2006-10-31 22:15 17101、如何学习Spring? 你可以通过下列途径学习sp ... -
Java/JSP中文乱码问题解决心得
2006-10-31 21:16 14955Java/JSP中文乱码问题解 ... -
JNI浅析
2006-10-26 21:19 1614JNI:是java本地接口,是jdk的一部分,通过jni ... -
NoClassDefDoundErr与ClassNotFoundException区别
2006-07-11 10:24 1757NoClassDefDoundErr与ClassNotFo ...
相关推荐
阿里巴巴Java性能调优华山版是...If / switch 性能评测 switch 性能优化 JVM 性能优化 MySQL性能优化的 50+ 小技巧 Redis 性能优化的 13 个小技巧 . . . 每篇文章图文并茂,附有源码 + 性能评测结果 + 优化方案。
性能优化手册是一套java性能...If / switch 性能评测 switch 性能优化 JVM 性能优化 MySQL性能优化的 50+ 小技巧 Redis 性能优化的 13 个小技巧 . . . 每篇文章图文并茂,附有源码 + 性能评测结果 + 优化方案。
除了用嵌套if语句外,C++中还提供switch语句,又称为“开关语句”,用来实现多分支(多选一),下面这篇文章主要给大家介绍了关于C++性能剖析教程之switch语句的相关资料,需要的朋友可以参考下
内容涵盖了switch语句的定义、基本语法、使用场景、优点、注意事项、与if语句的区别、实战应用、多重分支、范围检查、字符串处理、默认情况、性能考虑、灵活性、多态性、安全性、调试、性能优化和最佳实践等高级知识...
在Angular的原生指令中有这几个指令用来控制元素的展示与否,ng-show/ng-hide/ng-if和ng-switch。在angular性能优化中,我们也常常会用到它。这篇文章主要给大家介绍了在Angular.JS中指令ng-if、ng-show/ng-hide和ng...
from switch import Switchdef simple_example ( val ): values = [] with Switch ( val ) as case : if case ( 1 ): values . append ( 'Found 1' ) if case ( 2 , 3 ): values . append ( 'Found 2 or 3' ) ...
会有400-600个时钟周期的内存延迟,这个代价很昂贵,所以为了减少访问全局内存的指令次数,我们将满足字节大小和对齐要求的warp合并起来访问全局内存,从而减少对全局内存的访问次数,提高GPU性能。 关于warp指令...
最近看了一本书《8051单片机创新教程》,这本书比大学课本写得好,在大学的课本中,我们常见的按键扫描程序如下: ... switch(KEY_IO) { case 0xFE: KeyValue=1;break; case 0xFD: KeyValue=2;break
if)#exit Switch(config)#int f0/2 //配置端口F0/2,把该端口加入vlan10 Switch(config-if)#switchitchport mode access Switch(config-if)#switchitchport access vlan 10 Switch(config-if)#exit 同理,
" " "编写程序演示控制结构的用法: " " "编写程序分别来演示循环(for、while)、分支(if-else-end " " "、switch-case)和异常处理(try-catch)控制结构的用法。 " " "3.编写程序分别演示以下命令的功能。...
对VLAN的标准,我们只是介绍两种比较通用的标准,当然也有一些公司具有自己的标准,比如Cisco公司的ISL标准,虽然不是一种大众化的标准,但是由于Cisco Catalyst交换机的大量使用,ISL也成为一种不是标准的标准了...
控制流语句:熟悉if-else、switch、for、while等控制流语句的用法。 面向对象编程:深入理解Java中的类、对象、继承、封装和多态等概念。 异常处理:了解try-catch-finally块的使用,以及自定义异常的处理。 二、...
A 32-bit process is normally limited to addressing 2 gigabytes (GB) of memory, or 3 GB if the system was booted using the /3G boot switch even if there is more physical memory available. By leveraging...
In our example, if one transaction (T1) holds an exclusive lock at the table level, and another transaction (T2) holds an exclusive lock at the row level, each of the transactions believe they have ...
于是我就写成||&&形式的, 后来测试性能的时候,发现性能竟然上了一个数量级,可见这种写法在某些情况下可以增加性能,但是我并不确定是何种情况才能提高性能,因为我测试在通常情况下switch和||&&的性能是差不多的....
Swift是一种支持多编程范式和编译式的开源编程语言,由苹果公司于2014年在WWDC(苹果开发者大会)上发布...控制流:Swift提供了各种控制流结构,如if语句、switch语句、for循环和while循环等,用于控制程序的执行流程。
1、选择合适的算法和数据结构 2、使用尽量小的数据类型 3、减少运算的强度 (1)查表 (2)求余运算 (3)平方运算 (4)用移位实现乘除法运算 (5)避免不必要的整数除法 ...11、使用嵌套的if结构
用来压缩空白空间和空白的行 escape, noescape 语法 Freemarker代码 <#escape identifier as expression> ... <#noescape>...</#noescape> ... </#escape> ... <#noescape>... ... 用例 ...
if...else 条件语句if...else if 多分支语句switch 多分支语句 循环语句 while 循环语句do...while 循环for 循环语句 跳转语句 break 语句 continue 语句面向对象 类也是-种对象对象的创建 属性和方法 构造方法 方法...