标签:exception turn 定义 web开发 exp this sage time runtime
在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 中断函数执行,性能对比,及优化
标签:exception turn 定义 web开发 exp this sage time runtime
原文地址:https://www.cnblogs.com/xiaodu9499/p/13117967.html