网易首页 > 网易数码 > 正文

Java的异常处理对于性能的影响

0
分享至

【IT168 资讯】在对OneAPM的客户做技术支持时,我们常常会看到很多客户根本没意识到的异常。在消除了这些异常之后,代码运行速度与以前相比大幅提升。这就让我们产生一种猜测,也就是在代码里面使用异常会带来显著的性能开销。不过由于异常是错误情况处理的重要组成部分,完全摒弃也是不太可能的。那么异常处理对于性能影响到底有多大呢?我们来做个实验看看。

实验

我的实验基于一段随机抛出异常的简单代码。从科学的角度,这并非真正深入的测量;而且我们也并不了解HotSpot编译器会对运行中的代码做何动作。但无论如何,这段代码应该能够让我们了解一些基本情况:

结果

结果很有意思。抛出与捕获异常的代价似乎极低。在我的例子里,大约是每个异常0.02毫秒。除非你真的抛出太多异常(我们说的是10万次或者更多),否则这一点基本都可忽略。

尽管这些结果显示出异常处理本身并不影响代码性能,但却并未解决下面这个问题:异常对性能的巨大影响该由谁负责?因此我明显遗漏了什么重要的地板供需。

重新想了一下,我意识到自己遗漏了异常处理的一个重要部分。我没考虑到异常发生时你做了什么。在多数情况下你很有可能不仅仅是捕获异常,而问题就在这里。

一般情况下,你会试图对问题进行补充,并让应用在最终用户那里仍能发挥功能。所以我遗漏的就是为了处理异常而执行的补充代码。按照补充代码的不同,性能损失可能变得相当显著。在某些情况下这可能意味着重试连接到服务器,在其他情况下则可能意味着使用默认的后退解决方案,而这种方案提供的解决办法却会带来差得多的性能。

对于我们在很多情况下看到的行为,这似乎给出了很好的解释。不过我却不觉得分析已经万事大吉,而是感到这里还遗漏了别的什么东西。

栈轨迹

对此问题,我仍颇为好奇,为此审视了收集栈轨迹时情况有何变化。经常发生的也不过如此:

记下异常及其栈轨迹,以尝试找出问题为何。

为此我修改了代码,额外收集了异常的栈轨迹。这让情况显著改变。对异常的栈轨迹的收集,其性能影响要比单纯捕获并抛出异常高出10倍。因此尽管栈轨迹有助于理解哪里发生了问题(有可能还有助于理解为何发生问题),但却存在性能损失。

由于我们谈论的并非一条栈轨迹,所以此处的影响往往非常之大。多数情况下,我们都要在多个层次上抛出并捕获异常。我们看一个简单的例子:

Web服务客户端连接到服务器。首先,Java库级别上存在一个连接失败异常。此后会有框架级别上的客户端失败异常,再以后可能还会有应用层次上的业务逻辑调用失败异常。到现在为止,总共要搜集三条栈轨迹。

多数情况下,你都能从日志文件或者应用输出中看到这些栈轨迹。写入这些较长的栈轨迹也带来了性能影响。如果你定期查看日志文件的话,至少你应该都能看到它们并做出反应——你真的定期查看日志文件,对吧?

结论

因为存在性能影响而把异常弃之不用并非良策。异常有助于提供一种一致的方式来解决运行时问题,并且有助于写出干净的代码。但却需要对代码中抛出的异常数量进行跟踪,它们可能存在显著的性能影响。在OneAPM中我们默认要对所抛出的异常进行跟踪——而在很多情况下人们都会对代码中发生的异常以及在解决这些异常时的性能影响感到吃惊不已。

不过尽管使用异常很有裨益,您也应避免捕获过多的栈轨迹。异常应该是为异常的情况而设计的,使用时也应该牢记这一原则。但是,万一您不想遵从好的编程习惯,Java语言就会让您知道,那样做可以让您的程序运行得更快,从而鼓励您去那样做。

  
相关推荐
热点推荐
刚毕业的我给富婆当司机,一次她来我家,对我提出了一个要求

刚毕业的我给富婆当司机,一次她来我家,对我提出了一个要求

青青会讲故事
2025-03-29 13:22:24
研究发现:那些长期喝酒的老人,到七十岁以后,大多变成了这样

研究发现:那些长期喝酒的老人,到七十岁以后,大多变成了这样

泠泠说史
2025-09-30 10:21:48
秦朝竹简破译,历史再无秘密!秦始皇被黑2000年,这下“大白”了

秦朝竹简破译,历史再无秘密!秦始皇被黑2000年,这下“大白”了

铭记历史呀
2026-01-16 14:13:16
你去看一个人的家里,他过得好不好,你就去看这个人,这个家里…

你去看一个人的家里,他过得好不好,你就去看这个人,这个家里…

明智家庭教育
2026-01-15 22:33:50
单论军事指挥能力而言,十大元帅该怎么排名,徐帅肯定不是第八

单论军事指挥能力而言,十大元帅该怎么排名,徐帅肯定不是第八

兴趣知识
2026-01-16 14:56:20
秘书:一种精密的中介者

秘书:一种精密的中介者

疾跑的小蜗牛
2026-01-16 23:09:20
明天四九第一天,牢记“吃三样,喝一汤,忌二事”习俗,养精蓄锐

明天四九第一天,牢记“吃三样,喝一汤,忌二事”习俗,养精蓄锐

花小厨
2026-01-16 15:37:38
伊朗高层48小时转移15亿美元出境,哈梅内伊儿子转了3.28亿美元

伊朗高层48小时转移15亿美元出境,哈梅内伊儿子转了3.28亿美元

桂系007
2026-01-15 14:15:21
广东将遇“过山车式”气温升降

广东将遇“过山车式”气温升降

中国能源网
2026-01-16 17:58:04
章泽天播客“翻车”:在深度内容面前,资本不是万能的

章泽天播客“翻车”:在深度内容面前,资本不是万能的

陈列共和
2026-01-16 21:31:19
顶着骂名给中国送技术,年薪超4亿的她,为何敢和美国对着干

顶着骂名给中国送技术,年薪超4亿的她,为何敢和美国对着干

余們搞笑段子
2026-01-17 01:29:05
克鲁尼举家“逃离美国”?川普一语戳破好莱坞左派的虚伪

克鲁尼举家“逃离美国”?川普一语戳破好莱坞左派的虚伪

斌闻天下
2026-01-14 07:15:03
4个老婆,全家移民,享受正师级待遇,潘长江身上哪个标签是真的

4个老婆,全家移民,享受正师级待遇,潘长江身上哪个标签是真的

春秋论娱
2025-12-30 07:19:06
“特朗普级”战列舰,造价公布

“特朗普级”战列舰,造价公布

极目新闻
2026-01-16 11:58:33
续约反转!皇马新帅变阵,维尼修斯回归左路开心,姆巴佩搭档确定

续约反转!皇马新帅变阵,维尼修斯回归左路开心,姆巴佩搭档确定

万花筒体育球球
2026-01-16 19:18:41
花生再次被关注!调查发现:糖尿病常吃花生,不过半年或有6好处

花生再次被关注!调查发现:糖尿病常吃花生,不过半年或有6好处

蜉蝣说
2025-11-20 14:40:39
比恒大还惨!中国第二大民企轰然倒塌,负债7500亿,创始人被带走

比恒大还惨!中国第二大民企轰然倒塌,负债7500亿,创始人被带走

甜柠聊史
2025-12-24 18:22:43
《爸爸去哪儿》夏天长这么大了!暂不考虑进娱乐圈

《爸爸去哪儿》夏天长这么大了!暂不考虑进娱乐圈

娱乐顺风车666
2026-01-16 12:02:48
向太太敢说了!向华强今年已经78了,但是她和向华强还有X生活!

向太太敢说了!向华强今年已经78了,但是她和向华强还有X生活!

心静物娱
2025-12-24 11:02:28
U23亚洲杯神剧情:东南亚劲旅加时激战3-2绝杀晋级

U23亚洲杯神剧情:东南亚劲旅加时激战3-2绝杀晋级

阿衃体育
2026-01-17 02:44:32
2026-01-17 03:32:49

头条要闻

美媒披露:美国出动海军陆战队和福特号航母

头条要闻

美媒披露:美国出动海军陆战队和福特号航母

体育要闻

全队身价=登贝莱,他们凭什么领跑法甲?

娱乐要闻

李湘翻车,早就有迹可循!

财经要闻

清流|酒店商家在携程和美团之间沦为炮灰

科技要闻

贾国龙与罗永浩被禁言,微博CEO回应

汽车要闻

方程豹品牌销量突破30万辆 2026年还将推出轿跑系列

态度原创

游戏
本地
数码
旅游
军事航空

十三年后,《逆战:未来》想为所有逆行者们找回青春"/> 主站 商城 论坛 自运营 登录 注册 十三年后,《逆战:未来》想为所有逆行者们找回青春 廉颇 2...

本地新闻

云游内蒙|黄沙与碧波撞色,乌海天生会“混搭”

数码要闻

熊猫MX34U7 34英寸带鱼屏显示器发布,售价1299元

旅游要闻

北境飘雪南园绽,青秀山用一场菊花展,藏住南宁冬日顶流密码!

军事要闻

欧洲多国向格陵兰岛派遣军事人员 白宫回应

无障碍浏览 进入关怀版
×