为了说服当前维护的项目改用 Exception 处理错误,要弄一个异常效率的数据出来。唉…………
/**
* 异常效率测试
* @throws Exception
*/
@Test
public void testThrowEfficiency() throws Exception {
long times = 1000000;
long startTime;
System.out.println(times + "循环测试");
try {
recursion(0, true);
}
catch (Exception e) {
System.out.println("异常堆栈深度:" + e.getStackTrace().length);
}
for(int count = 0; count < 10; count++) {
startTime = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
try {
recursion(0, true);
}
catch (Exception e) {
}
}
System.out.println("有异常存在:" + (System.currentTimeMillis() - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
try {
recursion(0, false);
}
catch (Exception e) {
}
}
System.out.println("无:" + (System.currentTimeMillis() - startTime));
}
}
private void recursion(int count, boolean isThrow) {
if(count == 10) {
if(isThrow) {
throw new IllegalStateException("");
}
return;
}
recursion(count+1, isThrow);
}
public static void main(String[] args) throws Exception {
Test test = new MakeKeyNoTest();
test.testThrowEfficiency();
}
cpu:赛扬 CeleronM CPU 520 @ 1.60GHz(我可怜的机器……)
内存:2GB
BODY { FONT-FAMILY:Tahoma; FONT-SIZE:10pt }
P { FONT-FAMILY:Tahoma; FONT-SIZE:10pt }
DIV { FONT-FAMILY:Tahoma; FONT-SIZE:10pt }
TD { FONT-FAMILY:Tahoma; FONT-SIZE:10pt }
1000000循环测试
异常堆栈深度:13
有异常存在:2766
无:47
有异常存在:2890
无:47
有异常存在:2719
无:47
有异常存在:2718
无:47
有异常存在:2688
无:47
有异常存在:2718
无:47
有异常存在:2703
无:32
有异常存在:2672
无:63
有异常存在:2703
无:47
有异常存在:2703
无:31
|
1000000循环测试
异常堆栈深度:23
有异常存在:3688
无:94
有异常存在:3593
无:94
有异常存在:3625
无:94
有异常存在:3625
无:78
有异常存在:3922
无:94
有异常存在:5625
无:437
有异常存在:8469
无:94
有异常存在:4390
无:94
有异常存在:3594
无:109
有异常存在:3610
无:93
|
1000000循环测试
异常堆栈深度:33
有异常存在:5328
无:141
有异常存在:5109
无:125
有异常存在:5109
无:157
有异常存在:5093
无:141
有异常存在:12563
无:125
有异常存在:5125
无:125
有异常存在:5218
无:125
有异常存在:5172
无:141
有异常存在:5125
无:140
有异常存在:5204
无:125
|
1000000循环测试
异常堆栈深度:53
有异常存在:6172
无:234
有异常存在:6063
无:219
有异常存在:6031
无:234
有异常存在:6094
无:234
有异常存在:6078
无:219
有异常存在:6047
无:219
有异常存在:6062
无:235
有异常存在:6031
无:250
有异常存在:6156
无:235
有异常存在:6062
无:234
|
结果分析:
- 堆栈深度对速度影响很大,基本上呈线性增长。
- 在13层堆栈深度的情况下 耗时约2.7秒,折算每次异常用时 2.7微妙,及普通机器每秒可运行异常抛出37万次。
异常的效率比我以前想象的还要高。
分享到:
相关推荐
主要介绍了Java throw Exception实现异常转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
throw语句用于发出在执行期间出现反常情况(异常)信号throw语句通常和try-catch或try-finally语句起使用可以使用throw语句显式引发异常(这里引发自定义异常)创建用户自定义异常好编码思路方法是以“Exception”作为...
一個穩定的軟體一定要有一套異常處理機制來處理異常的丟出(Exception throw)。若是異常處理的規劃能考慮到通用性而能適用到不同的應用程式,這樣程式員就不必每次為一個新的專案規劃異常處理而傷腦筋。ExceptionApp...
同传统的 SSH 相比,它具备如下特点:轻 -- 当前最新版,整个 jar 文件共 910kB -- 针对 JDBC 的薄封装,无缓存全 -- 提供了 Dao (ORM, SQL 管理), Ioc, Aop, Mvc, Json解析 等必要功能活 -- 各个部分可以独立使用,...
Java的throw和return
Java中的throw与throws的关键字的使用
异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制。 本文为你解释怎样处理C++的异常处理。提供了大量的code
异常中throw与throws的使用区别
throws与throw.txt区别区别区别区别
java throw抛出异常实例二 java throw抛出异常实例二
21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21....
C++语言处理异常 try catch throw,带程序例子
一个非常简单的try-throw-catch源码
问题描述: C++里面为什么有时候在函数声明的时候在后面加throw()关键字? 解释: C++函数后面加关键字throw(something)限制,是对这个...void fun() throw(exceptionType); // 表示fun函数只能抛出exceptionType类
Java编程语言使用异常处理机制为程序提供了错误处理的能力. Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws
在PHP每一个可独立执行的op array最后的ZEND_HANDLE_EXCEPTION是用来干什么呢? 让我们从一个问题说起, 上周的时候, blue5tar提了一个问题:”对于下面的代码, onError... throw new Exception($errMesg); } function on
WEB开发 之 JavaScript 错误 - Throw、Try 和 Catch.docx
无论是.net还是java,在开发程序时都难免会用到throw关键字,对于初学者一般会认为它与try…catch捆绑在一起,这当然是错误的,事实上,throw的一个最重要的作用就是: 让程序告诉用户一些事情,这些事情一般是开发...
强大的.net反编译软件,可视化操作页面,操作页面基本跟vs的编辑环境一样,直接可以看到程序源代码,强得一匹
java throw抛出异常实例一 java throw抛出异常实例一