Java异常与提高性能。
一直以来对于异常应不应该处理业务都分为两派,一种认为使用异常更oo,一种反对异常认为消耗性能。
其实这两种观点都存在误区,其实异常当然是为了提高性能而存在的,异常更不是为了oo而存在。
异常消耗性能是因为异常都是继承Throwable这个类,这个有个方法非常消耗性能。public synchronized native Throwable fillInStackTrace()
当然你可以通过覆盖这个方法,去掉同步和堆栈填充,把异常变成一个普通java类,从而提升性能。
但是异常是不应该被用来做业务,即使通过改写也一样,同样需要创建一个实例,new一个实例同样是不小的开销,虚拟机还要对这个实例进行回收。如果异常情况频繁出现,同样会大量消耗系统资源。
那么回到异常的本质,异常的本质当然是用来处理异常的(废话),异常字面意思就是系统运行正常的时候不应该出现的,如果出现了就被认为是异常。所以异常应该是很少出现的,反复经常出现的就不应该是异常,而是业务应该而且必须考虑的范围。
代码1:
if(isNumber(a))
{
//正常
}else
{
//异常
}
代码2:
try{
//正常
}catch(Exception e)
{
//异常
}
如果绝大数情况a都是数字,那么就没有必要对a是否数字进行判断。由于使用try-catch减少了if判断,提升了性能。
所以异常是为了提升性能的,不是用来消耗性能的。