通常而言大家普遍的认知里switch case的效率高于if else。根据我的理解而言switch的查找类似于二叉树,if则是线性查找。按照此逻辑推理对于对比条件数目大于3时switch更优,并且对比条件数目越多时switch的优势越为明显。

 

一、测试目的

最近与开发同学对于前面提到的性能问题,有着各自不同的见解,为证明我的观点,现设计如下测试场景验证

PS:一个方法里多达65个if else


 

二、测试策略
利用Junit4执行本次测试,分别设计50个、70个、100个条件式测试,每轮测试分别执行1千万、2千万、3千万、4千万、5千万和6千万次,为了力求让每轮测试不受外部因素干扰每轮测试执行10次收集信息分析。
为了让java在纯净的环境中运行。同时关闭了QQ、360、chrome等应用软件。 


三、测试环境
  • Java 版本信息
Java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
Junit4
  • JVM配置信息
--launcher.XXMaxPermSize
256m
-Dosgi.requiredJavaVersion=1.6
-Xms512m
-Xmx1024m
  • 系统信息
Windows7 旗舰版
64位操作系统
  • 设备信息
处理器:Intel(R) Core(TM) i3-2328M CPU @ 2.20GHz 2.20 GHz
安装内存(RAM):4.00GB (3.90 GB 可用)
因此次不涉及硬盘读写,故不记录硬盘信息


四、测试脚本
        因篇幅所限,测试脚本略有缩减。
 1 import java.util.Calendar;
 2 import java.util.GregorianCalendar;
 3 import java.util.Random;
 4 import org.junit.After;
 5 import org.junit.Before;
 6 import org.junit.Test;
 7 public class ServerServiceTest {
 8  Calendar calender_begin, calender_end;
 9  Long time_begin, time_end; //记录测试开始时间,结束时间
10  int flagNumber = 1000000;// 迭代数
11  Random r = new Random();
12  int i = new Random().nextInt(100);//生成随机种子
13  @Before
14  public void setUp() throws Exception {
15   calender_begin = new GregorianCalendar();
16   time_begin = calender_begin.getTimeInMillis();
17  }
18  @After
19  public void tearDown() throws Exception {
20   calender_end = new GregorianCalendar();
21   time_end = calender_end.getTimeInMillis();
22   System.out.println(time_end - time_begin);
23  }
24  @Test
25  public void ifTest() {
26   for (int temp = 0; temp < flagNumber; temp++) {
27    i = r.nextInt(100);
28    if (i == 0) {
29    } else if (i == 1) {
30    } else if (i == 2) {
31    } else if (i == 3) {
32    } else if (i == 4) {
33    } else if (i == 5) {
34    } else if (i == 6) {
35    } else if (i == 7) {
36    } else if (i == 8) {
37    } else if (i == 9) {
38    } else if (i == 10) {
39    } 
40   }
41  }
42  @Test
43  public void switchTest() throws InterruptedException {
44   for (int temp = 0; temp < flagNumber; temp++) {
45    i = r.nextInt(100);
46    switch (i) {
47    case 0:
48     break;
49    case 1:
50     break;
51    case 2:
52     break;
53    case 3:
54     break;
55    case 4:
56     break;
57    case 5:
58     break;
59    default:
60     break;
61    }
62   }
63  }
64 }
View Code 

相关文章:

  • 2022-02-04
  • 2021-07-27
  • 2022-01-18
  • 2022-12-23
  • 2021-10-29
  • 2021-09-15
  • 2022-02-06
  • 2021-09-25
猜你喜欢
  • 2022-01-04
  • 2021-10-28
  • 2022-02-07
  • 2021-12-08
  • 2021-06-06
  • 2021-09-07
相关资源
相似解决方案