大家经常在讨论业务中如何使用异常,异常的性能如何等。
第一个问题 : uncheck 异常,check 异常 异常使用的原则
1、如果调用者有责任在调用前检查必要状态,但没检查,就抛出uncheck异常
一般要提供给调用者判断方法,如果他不调用,则是一个编程错误,就应该使用uncheck异常
private float balance;
/**
* <pre>
* 在扣款前调用本方法判断
* </pre>
* @param amount
* @return true 可以消费,false 余额不够
*/
boolean canConsume(float amount){
return balance > amount ? true : false;
}
/**<pre>
* 消费扣款
* 在使用前,要判断余额是否够,
* 调用canConsume(float amount)
* </pre>
* @param amount 消费金额,正数
*/
void consume(float amount){
if(amount > balance ) throw new IllegalArgumentException("amount too large");
balance -= amount;
}
void invoke(){
if(canConsume(50)){
consume(50);
}
}
2、如果是不调用者责任,而是本函数的责任,就必须声明抛出异常,check异常。
/**<pre>
* 消费扣款
* 在使用前,要判断余额是否够,
* 调用canConsume(float amount)
* </pre>
* @param amount 消费金额,正数
* @throws BalanceException 余额不足
*/
void consume(float amount) throws BalanceException{
if(amount > balance ) throw new BalanceException("amount too large");
balance -= amount;
}
void invoke(){
try {
consume(500);//消费
sendGift();//配送礼品
} catch (Exception e) {
// TODO: handle exception
notifyBalanceLack();//通知余额不足
}
}
第一个问题 : 异常是否影响性能
异常肯定影响性能。
实例化异常时,要调用超类Throwable中的 public synchronized native Throwable fillInStackTrace();
填充线程调用堆栈,这个方法是同步的,肯定影响性能。
如果业务异常不需要堆栈信息,可以覆盖:
@Override
public Throwable fillInStackTrace() {
return this;
}
我做了一个测试,并发线程10个,每个线程生成10000000个普通对象,一般异常,和覆写了不带同步的fillInStackTrace()的异常,时间是:
普通对象: 89673 毫秒
一般异常: 568413 毫秒
覆写fillInStackTrace()异常: 40424 毫秒
很明显,覆写fillInStackTrace()异常 性能最高。
分享到:
相关推荐
Boomerang就是一小段...雅虎异常性能小组列出了Boomerang可以胜任的监测工作:某个页面可感知的性能表现——考虑的是用户打开页面的那段时间动态页面性能用户带宽组件加载时间网络延迟 标签:Boomerang
为了从包含多种异常模式的动态数据流中检测和识别每个异常模式,本文提出了一种基于平稳小波变换和神经网络的... 实验结果表明,该方法不仅可以快速,准确地从动态数据流中识别质量异常模式,而且具有良好的抗噪性能。
压缩感测理论提出了从几次测量中恢复稀疏信号的想法。 本文将无线传感器网络中的异常事件检测和定位公式化为压缩感知问题。 在假设传感器的传输信号为二进制的情况下,分析了基本追踪算法与乘法器交替方向法以及...
在算法开发和实现方面,Matlab具有以下一些好处: 1. 丰富的数学和科学函数库:Matlab提供了广泛的数学、信号处理、图像处理、优化、统计等领域的函数库,这些函数库可以帮助开发者快速实现各种复杂的数值计算算法。...
我对⼈⼯智能的理解与看法 我对⼈⼯智能的理解与看法 ⼈⼯智能 研究让计算机具备模拟、延伸和扩展⼈的智能的⼀门技术科学。主要是来源于⼤量的数据来使机器学习能⽐⼈更快的计算出结果,这可能就是我眼中的⼤数据. ...
我对⼈⼯智能的理解与看法 我对⼈⼯智能的理解与看法 ⼈⼯智能 研究让计算机具备模拟、延伸和扩展⼈的智能的⼀门技术科学。主要是来源于⼤量的数据来使机器学习能⽐⼈更快的计算出结果,这可能就是我眼中的⼤数据. ...
我对⼈⼯智能的理解与看法 我对⼈⼯智能的理解与看法 ⼈⼯智能 研究让计算机具备模拟、延伸和扩展⼈的智能的⼀门技术科学。主要是来源于⼤量的数据来使机器学习能⽐⼈更快的计算出结果,这可能就是我眼中的⼤数据. ...
用于Monorepo管理的纱线工作区 适用于React框架和路由的NextJS 故事书和色度展示设计系统[] CSS的Tailwind [] Auth0代表Auth []内容管理的魅力[]部署速度[]异常报告哨兵[]用于性能和事件报告的Datadog [] Apollo...
关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory...
关于框架有意见 欢迎联系我一起探讨。 问答是happy http://blog.csdn.net/b275518834/article/details/8247685 操作方式:输入文本框设置线程数 点击第一个按钮请求10个地址信息 点击第二个按钮中断10个地址信息 ...
SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。 对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器...
(2)细化各种流程分支(考虑主流程、辅流程、异常处理、出错处理等) 2、考虑需求不完善之处(如与其它模块的交互、如对于性能的要求等),进一步补充用例 3、考虑设计约束(如分页处理、并发处理等),...
SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。 对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上...
通过阅读论文,毕业生不仅可以了解系统的整体架构和关键技术,还能学习到如何进行系统设计、如何优化性能、如何处理异常等宝贵的经验。 此外,该资源包中的源代码经过了精心的编写和整理,注释清晰、结构规范,为...
此外,渲染模板在很大程度上依赖于数据上下文,并且可以使用一些快捷方式来提高性能。 更多事件:向解析器和编译器添加事件。 缓存:使用第三方的、可交换的、模板缓存解决方案。 特点:尽管这
偏见||偏爱这里的每一个字节,都是对JavaScript的偏见或偏爱。有看法才准确,有态度才亲切。如果我错了,那您是对的。欢迎指正,异常感谢!
智能城市中组装的智能路灯应具备节能和更高性能。 普遍的路灯似乎不适合那些维护和安全非常复杂的明智城市。 为了解决这些问题,我们的想法中规划了智能路灯(SSL)。 每个智能灯都可以单独操作,从而达到非常精细的...
当前的功能集是有限的,异常处理还远远不够,但是性能似乎不错(内存使用量约为5-6kB)。安装与建造需要alsa-lib标头。 应该使用-threaded (用于并发)和-with-rtsopts=-I0 (以禁用空闲垃圾收集;将其保留为启用...
ExtJs最开始基于YUI技术,由开发人员 JackSlocum开发,通过参考JavaSwing等机制来组织可视化组件,无论从UI界面上CSS样式的应用,到数据解析上的异常处理,都可算是 一款不可多得的JavaScript客户端技术的精品。 ...
- 一些性能改进。 - 小改动和变化。 v1.10.223(2008年1月29日) - 增加了安全删除选项(Win2k和更高版本)。 - 增加的选择将设置保存到一个INI文件。 - 优化的错误日志。 - 改进的稀疏文件的恢复。 - 性能改善。 - ...