栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

抛出异常的哪一部分是昂贵的?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

抛出异常的哪一部分是昂贵的?

创建
异常对象并不比创建其他常规对象贵。主要成本隐藏在本机

fillInStackTrace
方法中,本机方法遍历调用堆栈并收集所有必需的信息以构建堆栈跟踪:类,方法名称,行号等。

有关高异常成本的神话来自大多数

Throwable
构造函数都隐式调用的事实
fillInStackTrace
。但是,有一个构造函数可以创建
Throwable
没有堆栈跟踪的。它使您可以快速实例化可抛出对象。创建轻量级异常的另一种方法是重写
fillInStackTrace


现在 抛出 异常怎么办?
实际上,这取决于在哪里 捕获 引发的异常。

如果使用相同的方法(或更确切地说,在相同的上下文中,因为上下文可以由于内联而包含多种方法)捕获它,则

throw
它的速度和简便性
goto
(当然,在JIT编译之后)也是如此。

但是,如果某个

catch
块位于堆栈的更深处,那么JVM需要展开堆栈帧,这可能需要更长的时间。如果
synchronized
涉及到块或方法,则花费的时间甚至更长,因为展开意味着释放已删除堆栈帧所拥有的监视器。


我可以通过适当的基准确认以上陈述,但是幸运的是,我不需要这样做,因为HotSpot的性能工程师Alexey
Shipilev的帖子已经很好地涵盖了所有方面:Lil’Exception
的出色性能。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486534.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号