JAVA异常是否对于性能有影响
在对OneAPM的客户做技术支持时,我们常常会看到很多客户根本没意识到的异常。在消除了这些异常之后,代码运行速度与以前相比大幅提升。这让我们产生一种猜测,就是在代码里面使用异 常会带来显著的性能开销。因为异常是错误情况处理的重要组成部分,摒弃是不太可能的,所以我们需要衡量异常处理对于性能影响,我们可以通过一个实验看看异常处理的对于性能的影响。
实验
我的实验基于一段随机抛出异常的简单代码。从科学的角度,这并非完全准确的测量,同时我也并不了解HotSpot 编译器会对运行中的代码做何动作。但无论如何,这段代码应该能够让我们了解一些基本情况。

结果很有意思:抛出与捕获异常的代价似乎极低。在我的例子里,大约是每个异常 0.02 毫秒。除非你真的抛出太多异常(我们指的是 10 万次或者更多),否则这一点基本都可忽略。 尽管这些结果显示出异常处理本身并不影响代码性能,但却并未解决下面这个问题:异常对性能的巨大影响该由谁负责?
我明显遗漏了什么重要的问题。
重新想了一下,我意识到自己遗漏了异常处理的一个重要部分。我没考虑到异常发生时你做了什么。在多数情况下你很有可能不仅仅是捕获异常!而问题就在 这里:一般情况下,你会试图对问题进行补充,并让应用在最终用户那里仍能发挥功能。所以我遗漏的就是:“”为了处理异常而执行的补充代码“”。按照补充代 码的不同,性能损失可能会变得相当显著。在某些情况下这可能意味着重试连接到服务器,在另一些情况下则可能意味着使用默认的回滚方案,而这种方案提供的解 决办法肯定会带来非常差劲的性能。对于我们在很多情况下看到的行为,这似乎给出了很好的解释。
不过我却不觉得分析到这里已经万事大吉,而是感到这里还遗漏了别的什么东西。
Stack trace
对此问题,我仍颇为好奇,为此监视了收集 strack trace 时情况性能有何变化。
经常发生的情况应该是这样的:记下异常及其栈轨迹,尝试找出问题到底在哪。
为此我修改了代码,额外收集了异常的 strack trace 。这让情况显著改变。对异常的 strack trace 的收集,其性能影响要比单纯捕获并抛出异常高出10倍。因此尽管 strack trace 有助于理解哪里发生了问题(有可能还有助于理解为何发生问题),但却存在性能损失。 由于我们谈论的并非一条 strack trace,所以此处的影响往往非常之大。 多数情况下,我们都要在多个层次上抛出并捕获异常。 我们看一个简单的例子: Web 服务客户端连接到服务器。首先,Java 库级别上存在一个连接失败异常。此后会有框架级别上的客户端失败异常,再以后可能还会有应用层次上的业务逻辑调用失败异常。到现在为止,总共要搜集三条 strack trace。 多数情况下,你都能从日志文件或者应用输出中看到这些 strack trace,而写入这些较长的strack trace 往往也会也带来性能影响。
结论
首先因为存在性能影响而把异常弃之不用并非良策。异常有助于提供一种一致的方式来解决运行时问题,并且有助于写出干净的代码。但我们应该对代码中抛 出的异常数量进行跟踪,它们可能导致显著的性能影响。所以 OneAPM 默认要对所抛出的异常进行跟踪——在很多情况下人们都会对代码中发生的异常以及在解决这些异常时的性能损耗感到吃惊不已。 其次尽管使用异常很有裨益,您也应避免捕获过多的 strack trace。异常应该是为异常的情况而设计的,使用时应该牢记这一原则。当然,万一您不想遵从好的编程习惯,Java 语言就会让您知道,那样做可以让您的程序运行得更快,从而鼓励您去那样做。
相关文章
Windows 11系统里的广告越来越多,弹窗、推荐、提示层出不穷,简直让人抓狂!别急,今天我为大家带来一份超详细的教程,手把手教你如何关闭这些烦人的广告,让你的Win11清2026-04-18
电脑打印机状态错误怎么解决? 快速搞定Windows打印机状态错误的方法
当我们急需打印文件时,电脑右下角弹出的“打印机处于错误状态”或“无法打印”的提示,无疑会让人感到困扰和焦虑,这种“错误状态”看似复杂,但实际上多数问题并非源于硬2026-04-18
电脑网络受限怎么办? Windows提示网络连接受限的解决办法
昨晚加班到一半,突然发现右下角的网络图标多了个黄色叹号,提示“本地连接受限制”,下面我们就来看看解决办法2026-04-18
轻松保护你的电脑隐私! Windows系统如何设置动态锁功能
如果您希望在离开电脑时无需手动操作即可自动锁屏,Windows动态锁功能可通过蓝牙检测手机距离实现该效果,以下是设置此功能的具体步骤2026-04-17
保护电脑数据安全! Windows系统快速关闭磁盘默认共享方法
你可能还不知道,系统默认还开启了硬盘分区(如C盘、D盘)的共享功能,今天我们就来看看一键关闭Windows默认共享,保护电脑数据安全的设置方法2026-04-17
Windows预览窗口大小怎么自由调节? 电脑任务栏预览窗口设置方法
对于Windows系统的深度用户来说,文件预览功能无疑是日常操作中的得力助手,然而,系统默认的预览窗口大小可能并不完全符合每个人的使用习惯,今天,我就为大家带来一个技术2026-04-17
windows无法更改设置怎么办? 电脑不允许修改系统设置无问题的解决办法
想要调整一下系统设置,却发现无论你怎么点来点去,它就是不给你改!这可真是让人欲哭无泪啊!别担心,今天我就来给大家分享一些解决方法,让你的Windows系统设置恢复正常2026-04-17
如何启用项目复选框? Windows系统打开文件复选框设置的教程
Windows复选框,也称为项目复选框,允许您在文件资源管理器中轻松选择多个文件和文件夹,默认情况下,此功能在Windows中是禁用的,但您可以通过进行一些简单的自定义来快速2026-04-16
Windows系统如何设置DPI缩放? 屏幕DPI缩放设置全攻略
你是否遇到过这样的困扰:新买的4K显示器文字模糊发虚?手机屏幕图标小到看不清?这可能并非硬件问题,而是DPI设置在“捣乱”!本文将系统解析DPI设置原理与实操技巧,助你2026-04-16
微软放大招! 所有Windows镜像都将失效 强制执行阶段已到来
最近,微软在win11系统“设置-Windows安全中心-设备安全性”中新增了安全启动检查,由于一个不可忽视的“硬期限”到来,安全启动的旧证书要过期了2026-04-08



最新评论