为什么在调用栈的较深处抛异常会导致性能问题 ?

为什么在调用栈的较深处抛异常会导致性能问题 ?

这是因为
构建Exception对象时会去取一下当前调用栈的快照(Throwable.fillInStackTrace()),这个操作比较耗时。 栈越深,操作就越耗时。

怎么解决这个问题

1.
避免滥用Exception作为Flow-Control的工具。 比如判断类型时可以用 instanceof ,而不必强转+捕捉ClassCastException.

2.
重用Exception对象。 这样总体上只需要取一次栈的快照。

3.
覆盖fillInStackTrace()方法,使它变成空方法;也就是说,
不生成快照

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.