关闭

异常的开销

标签: exception工作objectc
430人阅读 评论(0) 收藏 举报
分类:
//z 2012-3-29 0:01:36 IS2120@CSDN
异常的开销:
1. static cost
:managed exceptions相对代价较低(与c++相比)。
static cost所发生的地方:
1.1.try/finally/catch/throw这些代码构件实际所在的位置;
1.2. unmanaged code中一旦有了这些构件(使用异常),代码要做大量隐式的工作(比如记录下所有对象,以在异常发生时进行析构),有大量隐式清理工作需要去做。即便异常不发生,代码实际也要承受这些工作(记录以用以清理)
//z 2012-3-29 0:01:36 IS2120@CSDN
2. managed world
在托管的世界里,就没有这些广泛的显著的确定的对象的析构。这意味着异常的static cost会低一些。创建一个新的object并不会强制更新exception的状态。这样异常的代价就只限于使用异常本身,而不用为处理清理工作做大量的薄记了。

3. 当实际抛出一个异常的时候,代价叫非托管代码高一些。他们使用了同样的机制,托管代码是在非托管的基础上实现的。
在托管代码中,对于异常实现了更多的特性:比如说可以显示完整的调用堆栈。
这些新特性将带来空间和时间的开销;同时他们带来的调试和更正异常的便利性;即便如此,也得注意抛出一个异常代价不便宜。
//z 2012-3-29 0:01:36 IS2120@CSDN
0
0
查看评论

C++中的异常处理开销(13)---《More Effective C++》

注意异常处理是有代价的,即使没有使用try、throw或catch关键字,同样的你需要付出一些代价,下面我们讲一下需要付出的一些代价: 1)C++再设计时候需要支持异常,因为程序一般由多个目标文件组成,只有一个目标文件不进行异常处理并不能代表其他目标文件不进行异常处理,即使所有的目标文件不进行异常...
  • u014038273
  • u014038273
  • 2017-09-18 20:47
  • 242

系统性能调优(6)----Java异常处理性能优化

执行一个catch代码块和抛出一个异常花费是很高的,这个过程中的性能损耗主要是由于当创建一个异常时要获得线程栈的一个快照。抛出异常首先要创建一个新的对象Throwable类的构造函数调用名为fillInStackTrace的方法,fillInStackTrace方法检查堆栈,收集调用跟踪信息。由于在...
  • beijiguangyong
  • beijiguangyong
  • 2013-06-12 21:09
  • 7226

Java中的异常对程序效率有无影响

当异常没有发生时,没有影响。 其实从异常实现的角度来看,在throw语句处,跳转到异常的处理代码,不同的异常处理,应该类似C++中的虚函数表一样的数构结构(待考证)。 所以如果没有抛出异常,那和普通的代码完全一样。至于在抛出异常时要处理的开销和不使用异常,用返回码等来判断不同的错误,不仅代码复杂...
  • hengyunabc
  • hengyunabc
  • 2012-05-14 01:52
  • 3581

C语言: 函数调用的开销

初学C语言的时候,我们有时会听说函数调用会有一定的开销,在进行了进一步学习之后,我们来看看原来听说的开销指的什么。 下面是两个非常简单的样例,就不作解释了: 函数调用版本C程序:#include <stdio.h>int sum(int a, int b) { return ...
  • imred
  • imred
  • 2015-10-02 23:10
  • 1879

线程开销

线程是非常强悍的一个概念,因为它们使Windows即使在执行长时间运行的任务时也能随时响应。另外,线程允许用户使用一个应用程序(比如“任务管理器”)强制终止似乎已经冻结的一个应用程序(它也有可能正在执行一个长时间运行的任务)。但是,和一切虚拟化机制一样,线程会产生空间(内存耗用)和时间(运行时的执行...
  • liuyueyue0921
  • liuyueyue0921
  • 2015-08-10 13:19
  • 790

线程的上下文开销真得那么厉害吗(2)?

      线程切换的开销的确是比较厉害的。这是从今天的实验中得出的结果。      为了解决上次提出的疑问,今天在实验室做了一个试验,来测试线程的切换是否开销比较大。由于主要是为了比较线程的数目多少...
  • shidcai
  • shidcai
  • 2006-01-07 23:04
  • 8605

java 抛异常引起效率的低下

今天使用java 程序 从mssql导一个数据库导mysql,为了保证数据的一致性, 不允许数据的重复添加, 方法有两种: 1、mysql设置一个主键,mysql不允许主键的的值有重复,若是有重复,mysql会抛异常 MySQLIntegrityConstraintViolationExce...
  • fushou
  • fushou
  • 2011-11-09 18:15
  • 2057

服务层抛异常和返回错误码的区别

抛出异常可以让API层try catch 捕获异常,并且在发生问题时候,迅速定位到某行代码,异常链占用内存大, 返回错误码,可以让API解析错误码,做某些操作,但是不利于定位服务端代码错误。 举个例子:  1)创建订单 校验是否存在未支付订单,如果API 层要求 如果存在未支...
  • xiaoliuliu2050
  • xiaoliuliu2050
  • 2016-10-20 18:36
  • 974

ExecutorService 线程池使用和分析

android线程池的理解,晚上在家无事 预习了一下android异步加载的例子,也学习到了一个很重要的东东 那就是线程池+缓存  下面看他们的理解。 [size=1.8em]Handler+Runnable模式 我们先看一个并不是异步线程加载的例子,使用 Handl...
  • Binary2014
  • Binary2014
  • 2016-09-08 10:17
  • 787

自圆其说并发编程之——认识线程开销

本系列博文,自圆其说之——聊聊并发,是希望自己在学习并发的过程中,建立起一套属于自己的见解和知识体系,并能对其中的各种姿势能自圆其说,做到知其言,并知其所以言。 首先,我们要学习并发编程的目的,是为了要让程序跑得更加的快,但是在并发中,我们常常会面临,cpu的上下文切换,死锁,硬件和软件资源的限...
  • a82793510
  • a82793510
  • 2017-01-23 00:01
  • 348
    公 告

    仅用于个人备忘

    IS2120.CSDN#Google.MAIL

    物皆有价 风雨兼程

    Be Well.@Eat better. Get active. Unwind.

    BG57IV3.Hello World!

    K.T5.M.M

    $

    $ € ₤ ₤ € $

    ฿