JAVA异常是否对于性能有影响
发布时间:2022-02-04 04:43:05
在大多数代码实现的过程中,都会出现各种异常的现象,如果清除掉这些异常的话,代码运行的速度就比之前的要快很多,那么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
语言就会让您知道,那样做可以让您的程序运行得更快,从而鼓励您去那样做。


猜你喜欢
- 很多用户发现自己长时间没有电脑操作,屏幕就会自动进入游戏广告,不知道是软件引起的还是误触哪里了。出现这种情况应该是一些软件开启了空闲时的屏幕
- 在处理word文档的过程中,如果更改了一个标题的颜色,那怎样使其它标题的颜色自动发生改变呢?下面给大家介绍一下条件:标题是通过样式库设置的各
- 我们在使用电脑的时候经常会遇到自己的输入法有时候会变成一个×的符号,将鼠标移至这个图标还会显示已禁用输入法,可是很多小伙伴都不知道是什么原因
- 刚刚已经分享过一键关闭所有应用程序的技巧,但如果碰到某些程序的进程停止响应了,那也是干着急。这时候最好的办法就是直接干掉无响应的
- word2013怎么打开宏呢?很多用户对此还不是很清楚,小编这里就给大家带来有关word2013怎么打开宏的回答,希望能够对大家有所帮助。1
- 在我们使用win10系统时总会遇到各种各样的问题,例如想设置nvidia显卡控制面板的时候,却发现里面的选项除了3D设置,其余的选项都不见了
- win10开始菜单消失了怎么办?针对此问题,下面小编就给大家带来Win10开始菜单应用消失的恢复方法,希望可以帮助到大家win10开始菜单消
- 百度杀毒作为一款专业优秀的病毒查杀软件,拥有三大防毒服务,主动防御、实时监控、自主查杀,这三项服务基本就能让病毒无处遁形。不过,由于百度杀毒
- 大家在使用win10电脑时应该都知道,如果我们在电脑中浏览了什么网页、看过什么视频是会留下使用痕迹的。那如何查win10电脑使用痕迹呢?有些
- 很多小伙伴下载了win10系统的镜像,想制作成一个u盘启动盘,但是却不知道如何制作。其实我们只要以管理员的身份写入硬盘映像就可以了,今天小编
- Excel中经常需要使用到固定行高列宽的技巧,行高与列宽具体该如何进行固定呢?下面是小编带来的关于excel表格固定行高列宽的教程,希望阅读
- 我们在Word文档中,可以设置“打开文档时展开所有标题”,当我们开启该功能后,当我们打开文档时,默认情况下折叠的任何标题都会自动展开,开启该
- 在教学工作中,经常要用EXCEL统计学生成绩,其中要统计学生的及格人数、及格率,下面小编就为大家介绍excel函数计算及格人数和合格人数方法
- 近期有部分Win10用户遇到了任务管理器显示磁盘100%,这也造成了经常出现各种卡死的情况,那么有没有什么办法解决呢?下面小编就给大家分享一
- 最近有网友咨询microsoft office2021怎么破解?今天小编就为大家带来了office2021安装破解详细图文教程,一起看看吧o
- 各人好, 咱们在 操纵WPS 笔墨和Word软件 停止 一样平常办公时, 常常 需求用到Ctrl+X的 快速键来 停止剪切文本, 可是 咱们
- 我们在使用win7操作系统的时候,有的情况下可能就会遇到需要我们重装系统,为硬盘分区的情况。对于win7硬盘格式要求mbr还是gpt这种问题
- 在 Microsoft Office system 中,您可以使用密码防止其他人打开或修改文档、工作簿和演示文稿。友情提醒:Microsof
- 今天7月29号Win10正式版发布了,Win7、Win8用户从今天凌晨开始都会陆续收到Win10的升级提示,不过有些用户可能会安装Win10
- 电脑截屏方法比较多,可以使用系统自带的电脑截屏方法,也可以使用电脑软件进行截图,当然,快捷键截图是最方便的啦,接下来我们就来瞧瞧这些截图的小