`
徐风子
  • 浏览: 36849 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

throw Exception 的执行效率试验

阅读更多

为了说服当前维护的项目改用 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

 


结果分析:
  1. 堆栈深度对速度影响很大,基本上呈线性增长。
  2. 在13层堆栈深度的情况下 耗时约2.7秒,折算每次异常用时 2.7微妙,及普通机器每秒可运行异常抛出37万次。

异常的效率比我以前想象的还要高。

 

 

 
 

 

分享到:
评论

相关推荐

    Java throw Exception实现异常转换

    主要介绍了Java throw Exception实现异常转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    C# throw詳解

     throw语句用于发出在执行期间出现反常情况(异常)信号throw语句通常和try-catch或try-finally语句起使用可以使用throw语句显式引发异常(这里引发自定义异常)创建用户自定义异常好编码思路方法是以“Exception”作为...

    Exception Application for MFC

    一個穩定的軟體一定要有一套異常處理機制來處理異常的丟出(Exception throw)。若是異常處理的規劃能考慮到通用性而能適用到不同的應用程式,這樣程式員就不必每次為一個新的專案規劃異常處理而傷腦筋。ExceptionApp...

    Nutz-1.b.38

    同传统的 SSH 相比,它具备如下特点:轻 -- 当前最新版,整个 jar 文件共 910kB -- 针对 JDBC 的薄封装,无缓存全 -- 提供了 Dao (ORM, SQL 管理), Ioc, Aop, Mvc, Json解析 等必要功能活 -- 各个部分可以独立使用,...

    Java的throw和return

    Java的throw和return

    throw关键字

    Java中的throw与throws的关键字的使用

    C++异常处理技巧try/catch/throw/finally/exception

    异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制。 本文为你解释怎样处理C++的异常处理。提供了大量的code

    throws与throw的区别

    异常中throw与throws的使用区别

    throws与throw区别

    throws与throw.txt区别区别区别区别

    java throw抛出异常实例二

    java throw抛出异常实例二 java throw抛出异常实例二

    21.javathrow抛出异常对象.zip

    21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21....

    C++语言处理异常 try catch throw

    C++语言处理异常 try catch throw,带程序例子

    简单的try-throw-catch源码

    一个非常简单的try-throw-catch源码

    浅谈C++函数声明后面加throw()的作用(必看)

    问题描述: C++里面为什么有时候在函数声明的时候在后面加throw()关键字? 解释: C++函数后面加关键字throw(something)限制,是对这个...void fun() throw(exceptionType); // 表示fun函数只能抛出exceptionType类

    Exception课件

    Java编程语言使用异常处理机制为程序提供了错误处理的能力. Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws

    PHP原理之异常机制深入分析

    在PHP每一个可独立执行的op array最后的ZEND_HANDLE_EXCEPTION是用来干什么呢? 让我们从一个问题说起, 上周的时候, blue5tar提了一个问题:”对于下面的代码, onError... throw new Exception($errMesg); } function on

    WEB开发 之 JavaScript 错误 - Throw、Try 和 Catch.docx

    WEB开发 之 JavaScript 错误 - Throw、Try 和 Catch.docx

    throw的一些用法

    无论是.net还是java,在开发程序时都难免会用到throw关键字,对于初学者一般会认为它与try…catch捆绑在一起,这当然是错误的,事实上,throw的一个最重要的作用就是: 让程序告诉用户一些事情,这些事情一般是开发...

    dnspy .net反编译软件

    强大的.net反编译软件,可视化操作页面,操作页面基本跟vs的编辑环境一样,直接可以看到程序源代码,强得一匹

    java throw抛出异常实例一

    java throw抛出异常实例一 java throw抛出异常实例一

Global site tag (gtag.js) - Google Analytics