大家经常在讨论业务中如何使用异常,异常的性能如何等。
第一个问题 : 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
#### 四、项目组不同角色对软件性能的看法 - **系统管理员**关心的是系统在高负载下的稳定性、可扩展性和资源使用效率。 - **研发人员**聚焦于架构设计的合理性、代码效率和资源管理策略。 - **测试人员**负责监控...
* 各级管理人员对品质的看法:各级管理人员对品质的看法不同,高层管理人员认为品质是企业的生命线,中层管理人员认为品质是提高生产效率的重要手段,基层管理人员认为品质是提高产品质量的重要手段。 二、品质异常...
在描述中,虽然没有提供具体的技术细节,但可以感受到作者对Java的喜爱和推崇,认为其性能优秀,值得下载和学习。然而,为了更深入地理解Java,我们需要学习它的语法、核心概念以及如何使用各种库和框架来解决问题。...
而异常现象描述则是报告单的核心,它详细记录了具体的质量问题,这些问题可能涉及到产品的外观、性能、尺寸、安全性能等各个方面,也是后续分析和改进的依据。 经办人的部分则是记录和追踪报告单流转的责任人,他们...
压缩感测理论提出了从几次测量中恢复稀疏信号的想法。 本文将无线传感器网络中的异常事件检测和定位公式化为压缩感知问题。 在假设传感器的传输信号为二进制的情况下,分析了基本追踪算法与乘法器交替方向法以及...
"MindReader: 搜寻您最深的想法...自动无监督的异常脑电信号检测工具" 是一个创新项目,旨在利用先进的技术帮助分析和理解人类大脑的活动。该项目以"读心者"的形象来表现其核心功能,即通过无监督的学习算法探测并...
在实际应用中,我们可能会遇到数据缺失、异常值或多重共线性等问题,需要预处理数据。Matlab提供了诸如`fillmissing`、`isoutlier`和`regress`等函数来处理这些问题。同时,正则化技术如LASSO和Ridge回归可以帮助...
这篇文章将分享一些关于Java学习的心得和重要知识点,希望能为迷茫中的学习者提供指导。 首先,Java的基础至关重要。这包括理解基本语法、数据类型、运算符、流程控制语句等。这些是构建任何程序的基础,对于初学者...
"我正在测试一些想法并摆脱其他想法"这部分描述揭示了Wax当前的开发状态,即处于一个探索和优化的过程中。模糊测试工具的设计通常涉及到如何生成有效的测试输入、如何覆盖更多的代码路径、如何快速检测到异常等复杂...
在算法开发和实现方面,Matlab具有以下一些好处: 1. 丰富的数学和科学函数库:Matlab提供了广泛的数学、信号处理、图像处理、优化、统计等领域的函数库,这些函数库可以帮助开发者快速实现各种复杂的数值计算算法。...
以下是对标题“有用的东西:我对常见Java库的看法以及一些技巧”的详细解读。 首先,让我们来看看几个备受开发者喜爱的Java库: 1. **Guava**:Google提供的核心库,包含大量Java语言基础类的增强,如集合、缓存、...
标题与描述概述的是个人对Hibernate框架的理解与观点,这一部分提到了Hibernate在处理数据库操作时的一些关键特性,如事务管理、对象持久化以及查询优化等。以下是对这些知识点的详细阐述: ### Hibernate框架简介 ...
异常处理是C++新增的特性之一,作者同样对异常处理提出了自己的看法,包括何时使用异常是合适的,何时则不应该使用。异常处理机制可以处理程序运行时出现的异常情况,但是滥用异常会导致代码难以理解和维护。因此,...
【测量性能西格玛(SIGMA):提升品质管理】 西格玛(SIGMA)是一种在品质管理中广泛采用的方法,旨在系统性地衡量、分析并改进组织的绩效。这个框架由五个主要阶段组成,分别是定义机会、衡量性能、分析机会、改善...
在标题中提到的"SPC的想法及其做法",是指运用SPC的思路和实施步骤。SPC的核心理念是理解并控制生产过程中的变异,以提高产品质量和生产效率。以下是SPC的一些关键知识点: 1. **质量的概念**:质量不仅仅是符合...
首先,项目标题"数据科学项目"暗示了这是一个关于实践操作和动手学习的数据科学实践集。这可能是由一系列小项目组成,旨在帮助初学者或有经验的数据科学家提升技能,理解数据科学的核心概念,并将其应用于真实世界的...
虽然提供的具体内容部分重复提及了一个网站地址,并没有给出具体的面试知识点或者技巧,但基于这个标题和描述,下面将围绕C/C++编程相关的面试知识点进行展开,为准备面试的程序员们提供一些有价值的参考信息。...
- 在性能方面,`StringBuffer`由于涉及对象的创建和修改,相对于简单地使用`String`可能会稍微慢一些。但在需要大量修改字符串的情况下,使用`StringBuffer`可以避免频繁创建新的字符串对象,从而提高性能。 ### ...