位置: 编程技术 - 正文

JAVA异常是否对于性能有影响(java异常后面的语句会运行吗)

编辑:rootadmin

推荐整理分享JAVA异常是否对于性能有影响(java异常后面的语句会运行吗),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:java中异常的处理方法,java中异常可能出现的情况,java异常简单理解,java异常简单理解,java中异常是一种对象吗,java中异常是一种对象吗,java对异常的处理,java中异常是一种对象吗,内容如对您有帮助,希望把文章链接给更多的朋友!

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

实验

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

结果很有意思:抛出与捕获异常的代价似乎极低。在我的例子里,大约是每个异常 0. 毫秒。除非你真的抛出太多异常(我们指的是 万次或者更多),否则这一点基本都可忽略。 尽管这些结果显示出异常处理本身并不影响代码性能,但却并未解决下面这个问题:异常对性能的巨大影响该由谁负责?

我明显遗漏了什么重要的问题。

JAVA异常是否对于性能有影响(java异常后面的语句会运行吗)

重新想了一下,我意识到自己遗漏了异常处理的一个重要部分。我没考虑到异常发生时你做了什么。在多数情况下你很有可能不仅仅是捕获异常!而问题就在 这里:一般情况下,你会试图对问题进行补充,并让应用在最终用户那里仍能发挥功能。所以我遗漏的就是:“”为了处理异常而执行的补充代码“”。按照补充代 码的不同,性能损失可能会变得相当显著。在某些情况下这可能意味着重试连接到服务器,在另一些情况下则可能意味着使用默认的回滚方案,而这种方案提供的解 决办法肯定会带来非常差劲的性能。对于我们在很多情况下看到的行为,这似乎给出了很好的解释。

不过我却不觉得分析到这里已经万事大吉,而是感到这里还遗漏了别的什么东西。

Stack trace

对此问题,我仍颇为好奇,为此监视了收集 strack trace 时情况性能有何变化。

经常发生的情况应该是这样的:记下异常及其栈轨迹,尝试找出问题到底在哪。

为此我修改了代码,额外收集了异常的 strack trace 。这让情况显著改变。对异常的 strack trace 的收集,其性能影响要比单纯捕获并抛出异常高出倍。因此尽管 strack trace 有助于理解哪里发生了问题(有可能还有助于理解为何发生问题),但却存在性能损失。 由于我们谈论的并非一条 strack trace,所以此处的影响往往非常之大。 多数情况下,我们都要在多个层次上抛出并捕获异常。 我们看一个简单的例子: Web 服务客户端连接到服务器。首先,Java 库级别上存在一个连接失败异常。此后会有框架级别上的客户端失败异常,再以后可能还会有应用层次上的业务逻辑调用失败异常。到现在为止,总共要搜集三条 strack trace。 多数情况下,你都能从日志文件或者应用输出中看到这些 strack trace,而写入这些较长的strack trace 往往也会也带来性能影响。

结论

首先因为存在性能影响而把异常弃之不用并非良策。异常有助于提供一种一致的方式来解决运行时问题,并且有助于写出干净的代码。但我们应该对代码中抛 出的异常数量进行跟踪,它们可能导致显著的性能影响。所以 OneAPM 默认要对所抛出的异常进行跟踪——在很多情况下人们都会对代码中发生的异常以及在解决这些异常时的性能损耗感到吃惊不已。 其次尽管使用异常很有裨益,您也应避免捕获过多的 strack trace。异常应该是为异常的情况而设计的,使用时应该牢记这一原则。当然,万一您不想遵从好的编程习惯,Java 语言就会让您知道,那样做可以让您的程序运行得更快,从而鼓励您去那样做。

Windows设置启动菜单的等待时间的两种方法 启动菜单是Windows必不可少的一部分,安装多系统,或安装各种一键还原工具,都需要用到。可是,如果启动菜单停留时间过长,就会拖慢启动速度,反

盗版windows系统windows更新始终异常怎办么? 对于一般window盗版用户(正版请直接无视此篇废话)来说Windows更新其实是一个可要可不要的程序1、哎,等了半天也不见启动那里的红色感叹号出现(就

windows系统开机出现Supervisory.exe应用程序错误怎么办? 最近刚刚GHOST(重装)系统,登录后提示Supervisory.exe应用程序错误。虽然这个错误不会影响到我们用电脑的各种软件,但每次登录就弹出这个,感觉有些

标签: java异常后面的语句会运行吗

本文链接地址:https://www.jiuchutong.com/biancheng/350805.html 转载请保留说明!

上一篇:操作系统中的Hosts文件工作原理和作用及其详细介绍(操作系统中的三级调度)

下一篇:Windows设置启动菜单的等待时间的两种方法(Windows设置启动引导)

  • 预缴增值税需要预缴附加税吗
  • 员工产假个税系统改为非正常要更正申报吗?
  • 小规模纳税人免税账务处理
  • 快递公司增值税怎么算
  • 小规模企业多交增值税
  • 个体小规模一般纳税人税率多少
  • 行政单位要考什么
  • 土地增值税预征率
  • 开具有误拒收的增值税专用发票怎么办?
  • 质检实验室布局
  • 领用外购材料用于动产
  • 上年的费用支出包括哪些
  • 公允价值变动损益属于当期损益吗
  • 超过一年的保证金怎么交个税
  • 向消费者支付佣金怎么算
  • 民办非营利组织幼儿园清算时固定资产如何处理
  • 进项发票未抵扣部份开红冲后当月能抵扣吗?
  • 公休假补贴多少钱
  • 小规模附加税申报表填写范本
  • 以存货对外投资,现金流量表
  • 金融会计风险及防范措施研究目的和意义
  • 当企业预收款项无需退回
  • 股东投入的资金可以计入资本公积吗
  • 建筑安装服务费可以抵扣进项税吗
  • 物流公司支付运费怎么做账
  • 多计提的增值税和附加税怎么冲减?
  • 怎么检查电脑硬件是否正常
  • 应交增值税缴纳后入什么费用
  • 进项税额转出会计分录福利费
  • kkfileview启动组件失败
  • 企业发生的诉讼费用
  • php如何实现伪静态
  • 给php开发者的编程代码
  • 商业汇票转让后,能否追索前手
  • 发票中的密码区是如何形成的
  • 基于Python实现五大常用分类算法(原理+代码)
  • PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
  • css中哪些属性可以使用
  • discuz去除官方论坛
  • 增值税专用发票和普通发票的区别
  • 企业注销时实收资本清算时要作资产处置收益交所得税吗
  • 金税盘开票如何增加商品编码
  • 个人社保进费用,还要报个税么
  • python logger
  • 调整以前年度销项税怎么填申报表
  • 给个人的返佣如何交税
  • 税控盘使用费
  • 合作社收到政府补贴会计分录
  • 工厂加工费如何计算
  • 材料成本差异的含义
  • 运输费用如何做账
  • 退货只能退一半价钱合理吗
  • 小规模纳税人差旅费可以抵扣吗
  • 员工借款怎么处理
  • 材料报废处理
  • 减免税款属于政府补助利得吗
  • 未开票收入账上税率按多少
  • 所有进项增值税怎么申报
  • 应收票据和应收账款减少说明什么
  • 营业收入是利润总额吗
  • 商业企业固定资产一次性扣除
  • 请问购买
  • 如何查看网络连接密码
  • xp如何给文件夹加密码
  • linux硬件设备分为
  • win8尝试修复
  • 如何关闭win8快速启动
  • win7系统鼠标右键没有压缩文件功能
  • win8.1系统升级win10
  • win10开机图标就变乱
  • win7系统怎么查看隐藏文件夹
  • win8安装ie11
  • ubuntu搭建ftp服务器的步骤
  • 获取nodejs命令行信息
  • 安卓环境搭建id怎么设置
  • ubuntu touch教程
  • javascript:void(0)点击登录没反应怎么解决
  • 市直单位正职是市单位一把手吗
  • 绩效三级指标体系
  • 杭州市电子税务局官网登录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设