浏览 4502 次
锁定老帖子 主题:Java异常与提高性能。
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2013-12-17
其实这两种观点都存在误区,其实异常当然是为了提高性能而存在的,异常更不是为了oo而存在。 异常消耗性能是因为异常都是继承Throwable这个类,这个有个方法非常消耗性能。public synchronized native Throwable fillInStackTrace() 当然你可以通过覆盖这个方法,去掉同步和堆栈填充,把异常变成一个普通java类,从而提升性能。 但是异常是不应该被用来做业务,即使通过改写也一样,同样需要创建一个实例,new一个实例同样是不小的开销,虚拟机还要对这个实例进行回收。如果异常情况频繁出现,同样会大量消耗系统资源。 那么回到异常的本质,异常的本质当然是用来处理异常的(废话),异常字面意思就是系统运行正常的时候不应该出现的,如果出现了就被认为是异常。所以异常应该是很少出现的,反复经常出现的就不应该是异常,而是业务应该而且必须考虑的范围。 代码1: if(isNumber(a)) { //正常 }else { //异常 } 代码2: try{ //正常 }catch(Exception e) { //异常 } 如果绝大数情况a都是数字,那么就没有必要对a是否数字进行判断。由于使用try-catch减少了if判断,提升了性能。 所以异常是为了提升性能的,不是用来消耗性能的。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2013-12-21
楼主说的大部分赞同,但是“由于使用try-catch减少了if判断,提升了性能”不太赞同,个人认为宁愿多判断,也要减少异常发生,特别是在安全性和性能都要求较高的项目
|
|
返回顶楼 | |
发表时间:2013-12-23
同意楼上的看法
|
|
返回顶楼 | |
发表时间:2013-12-23
同意楼上的看法
|
|
返回顶楼 | |
发表时间:2013-12-24
最后修改:2013-12-24
看完了,只看到一句有用的。
public synchronized native Throwable fillInStackTrace() 耗性能. synchronized:这个是耗资源,也可以说是耗性能! 就是队列的使用方式。 不过,程序中的异常,要么抛出,要么捕获处理,一般是不经常发送的情况,这里的性能问题可忽略; 当然,你如果把try catch当作if来使用,这是很糟糕的一种写法(想想一个循环吧) 是否捕获异常,就像1楼说的那个,按需捕获; 但是个人不建议自己手动捕获异常,如果遇到需要捕获异常,直接抛给框架处理就好了。 |
|
返回顶楼 | |