您知道Java中引发和处理异常的代价是多少?
我们在团队中就异常的实际成本进行了多次讨论。一些人尽可能地避免使用它们,有人说使用异常会导致性能损失被高估。
今天,我在我们的软件中找到了以下代码:
private void doSomething()
{
try
{
doSomethingElse();
}
catch(DidNotWorkException e)
{
log("A Message");
}
goOn();
}
private void doSomethingElse()
{
if(isSoAndSo())
{
throw new DidNotWorkException();
}
goOnAgain();
}
与之相比,它的性能如何
private void doSomething()
{
doSomethingElse();
goOn();
}
private void doSomethingElse()
{
if(isSoAndSo())
{
log("A Message");
return;
}
goOnAgain();
}
我不想讨论代码美感或其他任何内容,而只是关于运行时行为!您有真实的经验/测量方法吗?
我没有花时间去阅读Exception,但是用您的一些修改后的代码进行了非常快速的测试,我得出的结论是Exception情况比boolean情况要慢得多。
我得到以下结果:
Exception:20891ms
Boolean:62ms
从此代码:
public class Test {
public static void main(String args[]) {
Test t = new Test();
t.testException();
t.testBoolean();
}
public void testException() {
long start = System.currentTimeMillis();
for(long i = 0; i <= 10000000L; ++i)
doSomethingException();
System.out.println("Exception:" + (System.currentTimeMillis()-start) + "ms");
}
public void testBoolean() {
long start = System.currentTimeMillis();
for(long i = 0; i <= 10000000L; ++i)
doSomething();
System.out.println("Boolean:" + (System.currentTimeMillis()-start) + "ms");
}
private void doSomethingException() {
try {
doSomethingElseException();
} catch(DidNotWorkException e) {
//Msg
}
}
private void doSomethingElseException() throws DidNotWorkException {
if(!isSoAndSo()) {
throw new DidNotWorkException();
}
}
private void doSomething() {
if(!doSomethingElse())
;//Msg
}
private boolean doSomethingElse() {
if(!isSoAndSo())
return false;
return true;
}
private boolean isSoAndSo() { return false; }
public class DidNotWorkException extends Exception {}
}
我愚蠢地没有很好地阅读我的代码,并且以前有一个错误(多么令人尴尬),如果有人可以三遍检查此代码,我非常乐意使用,以防万一我变老了。
我的规格是:
在我看来,您应该注意到,非异常方法不会在doSomethingElse中给出日志错误,而是返回一个布尔值,以便调用代码可以处理失败。如果有多个区域可能会失败,则可能需要在内部记录错误或引发异常。
问题内容: 我以前没有听说过,但是我对Python还是比较陌生。异常处理意味着动态调用和静态返回,而语句是静态调用,静态返回。 如何进行检查是好是坏,似乎正好相反。谁可以给我解释一下这个? 问题答案: 您可能会发现这篇文章很有帮助: 尝试/除Python以外的性能:简单测试 ,Patrick Altman进行了一些简单的测试,以了解在各种条件下进行条件检查(在这种情况下特定于字典键)的性能(仅针对
问题内容: (不要与流行的.Net单元测试库Xunit混淆。) 今天,我无聊地开始检查Gmail DOM(是的,我很无聊)。 一切看起来都很简单,直到我注意到某些元素的宽度有趣的规范为止。杰出的Googlites使用稀有的“ ex”单位指定了多个表格列。 起初我很困惑(“什么是’ex’?”),然后又回到了我的脑海:我似乎还记得几年前第一次学习CSS时的一些事情。根据CSS3规范: [ ex单位 ]
我们知道捕获异常的代价很高。但是,即使从未抛出异常,在Java中使用try-catch块是否也会很昂贵呢? 我发现堆栈溢出问题/答案为什么try块很贵?,但它是针对.NET的。
本章主要列出 JA 的错误代码,供开发者参考 异常代码 描述 原因 解决方案 2000 Success - - 5000 Failure 多为系统异常,如 JA 本身的 BUG,或者其他原因 请参考控制台异常栈 5001 Not Implemented 方法未实现 ① 针对自定义的 oauth 平台,请检查你的代码,是否存在未实现必要接口的问题; ② 针对 JA 内置的平台,说明该平台的某个方法暂
我正试图为以下情况想出一个算法:我想在一个无向图上运行一个最小代价算法。边有一个与之相关的代价,顶点有两个与之相关的代价。这就是它变得有点棘手的地方。我必须选择与顶点相关的2个成本中的一个。如果我选择cost1,顶点将属于类型1,如果我选择cost2,顶点将属于类型2。只有当顶点具有不同的类型时,它们才能被认为是由一条边连接的。大多数时候,为顶点选择成本最低的顶点是合乎逻辑的,但是根据与它相关联的
我正在尝试编写允许我做4件事的代码,我正在使用try和except。 代码如下: 但我还需要使用2个例外。你能给我解释一下我怎么做吗? 主要目标是下载一个文件;如果仍然没有,下载第二个文件,依此类推。