使用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/ 

 

posted @ 2020-06-13 16:28  蟑螂恶霸的开发笔记  阅读(1030)  评论(0编辑  收藏  举报