异常体系
直接继承Exception的异常是受检异常(checked Exception)或编译时异常(Compile Exception);
直接继承RuntimeException的异常是非受检异常(unchecked exception)
为何高并发下太多异常会导致程序变慢?
因为异常是一个调用链,这个链中就是每个方法挨个调用的方法栈;这就是解释了为什么发生异常的时候,会从异常发生的最开始能够追踪到调用异常的地方。
而这个过程就是是非常消耗性能的。
如何解决呢?
Throwable类有个方法可以说明是否打印异常,在自定义异常的时候,可以调用该方法然后来让定义的该方法是否打印栈信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Throwable的特殊构造函数
protected Throwable(String message, Throwable cause,
boolean enableSuppression,
boolean writableStackTrace) {
if (writableStackTrace) {
fillInStackTrace();
} else {
stackTrace = null;
}
detailMessage = message;
this.cause = cause;
if (!enableSuppression)
suppressedExceptions = null;
}
自定义构造方法内的代码
1
super(msg, cause, true, false);