结论先行:异常本身对性能影响通常不大,但“滥用异常”或“频繁抛异常”代价很高。
下面分层说明,方便你判断是否该担心。
异常不是“免费”的,主要成本来自:
异常对象的创建
new Exception()控制流跳转
JVM 优化受限
影响:几乎可以忽略
try {
Integer.parseInt("abc");
} catch (NumberFormatException e) {
// 处理
}
✅ 这是异常的正确用法
影响:非常大
try {
while (true) {
readNext(); // 没数据就抛异常
}
} catch (EndException e) {
...
}
问题:
if 慢 几倍到几十倍❌ 这是反模式
例如:
性能会明显下降
| 场景 | 性能 |
|---|---|
if (x == null) |
极快 |
try { ... } catch 不抛异常 |
几乎无成本 |
| 抛一次异常 | 慢(微秒级) |
| 每秒抛几千次 | 明显变慢 |
| 异常驱动业务逻辑 | 很慢,不可接受 |
注意:具体数字依赖 JVM、栈深度、是否开启
-XX:-OmitStackTraceInFastThrow
✅ 错误
try {
a++;
} catch (Exception e) {}
✅ 不一定
✅ 该用异常
❌ 不该用异常
if / return / Optionalif (!isValid(x)) {
return false;
}
Optional<User> findUser(int id)
Result<T, Error> execute()
异常不是慢,是“被频繁使用时慢”。
如果你愿意,可以告诉我:
我可以给你更精确的评估或优化建议。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。