使用return 和 throw 中断函数执行,性能对比,及优化
Posted xiaodu9499
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用return 和 throw 中断函数执行,性能对比,及优化相关的知识,希望对你有一定的参考价值。
在javaweb开发过程中使用throw 自定义异常,配合全局异常捕获可以大大减少代码量,提升开发效率,在近期项目codereview中,
有小伙伴提出通过throw来中断效率不如直接retrun,之后查阅资料 ( https://stackoverflow.com/questions/36343209/which-part-of-throwing-an-exception-is-expensive ) ,发现主要是 Throwable 类中的 fillInStackTrace() 函数,影响性能,此函数的主要功能是,遍历调用堆栈并手机堆栈的类,方法名称,行号等, 对于实际项目使用中自定义异常往往不需要此类信息,比如参数校验的场景,只需将校验信息抛出即可,
所以在实际使用中,如果不需要堆栈信息可以重写 fillInStackTrace() 函数
1 public class MyException extends RuntimeException { 2 3 public MyException(String message) { 4 super(message); 5 } 6 7 @Override 8 public synchronized Throwable fillInStackTrace() { 9 return this; 10 } 11 }
重写之后经过简单测试,发现性大幅所提升,但依旧没有直接retrun高效, 测试代码地址: https://github.com/xiaodu9499/cnblogs_demo/tree/master/return_or_throw/
以上是关于使用return 和 throw 中断函数执行,性能对比,及优化的主要内容,如果未能解决你的问题,请参考以下文章
C++中,用throw抛出异常后,throw之后的语句是不是继续执行?
举例说明c语言中的中断语句break,continue,return的区别及相同之处
ES6中Iterator 接口与 Generator 函数以及遍历器对象的 return(),throw()使用