java 业务异常 writableStackTrace
业务异常并不需要堆栈信息。可通过将 writableStackTrace 设置为false提高性能。尽管和方法直接返回仍有差距,但为了代码更加整洁是值得的。
其实,虽然时间上差了10多倍,但创建50万次仅需要500ms,大多数情况下 writableStackTrace=false 这种优化也不是必要的 (没有考虑内存)。
public class BizException extends RuntimeException {
public BizException(String message) {
this(message, null, false);
}
public BizException(String message, Throwable cause) {
this(message, cause, false);
}
public BizException(String message, Throwable cause, boolean writableStackTrace) {
super(message, cause, false, writableStackTrace);
}
public static void main(String[] args) {
boolean writableStackTrace = false;
test(writableStackTrace);
test(writableStackTrace);
test(writableStackTrace);
test(writableStackTrace);
test(writableStackTrace);
test(writableStackTrace);
test(writableStackTrace);
test(writableStackTrace);
}
public static void test( boolean writableStackTrace) {
int capacity = 500000;
long start = System.currentTimeMillis();
for (int i = 0; i < capacity; i++) {
final BizException themeException = new BizException("",null,writableStackTrace);
}
System.out.println("writableStackTrace "+writableStackTrace+": "+ (System.currentTimeMillis() - start));
}
}
时间对比:
writableStackTrace false: 21 writableStackTrace false: 22 writableStackTrace false: 16 writableStackTrace false: 3 writableStackTrace false: 5 writableStackTrace false: 13 writableStackTrace false: 14 writableStackTrace false: 19 | writableStackTrace true: 439 writableStackTrace true: 282 writableStackTrace true: 292 writableStackTrace true: 265 writableStackTrace true: 249 writableStackTrace true: 270 writableStackTrace true: 236 writableStackTrace true: 266 |
---|---|