java异常

java异常

Posted by bulingfeng on July 27, 2024

异常体系

直接继承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);