Java异常处理和性能的成本

时间:2016-03-21 21:28:18

标签: java performance exception

以下代码将抛出异常“String index out of range:-1”。 从Java性能的角度来看,检查index>是否更好? -1或者只是让代码抛出异常?让框架处理Logging it?

String abc = "somedata";
if (abc != null) {
    int index = abc.lastIndexOf(',');
    abc = abc.substring(0, index);
}

=编辑=我想我会总结一下讨论/观点。

我的一些开发者朋友之间就此争论不休。我尊重这两种观点,如下所述。

**开发人员的想法背后不要担心“字符串索引超出范围:-1”**

合法用户将提交正确的数据并获得正确的结果。 黑客/脚本编写者/非合法使用发布无效数据的应用程序可能会在UI中看到损坏的页面,但我关心的最少。 我让系统抛出异常,让框架捕获并记录它。 让它被记录的好处告诉我有脚本滥用我的系统。

**我对它的看法**

知道有脚本/黑客试图滥用我的系统,那么什么? IMO,关于网络上任何重要的知名系统,大多数都会定期收到来自黑客系统的大量脚本请求。 不需要任何证据或证明。识别和阻止它们是WAF系统的工作,而不是我记录数千个代码 例外情况每天都要告诉黑客。

我同意mvd的回答,而不是投掷/捕获/记录。 当我们发布无效数据时,我们必须决定我们想要做什么,要么是导致不满意的业务流程,要么是我不关心的完全有缺陷的请求。 如果我关心然后做备用业务流场景,如果我不在乎,则忽略并记录警告,不需要抛出/ catch / throw / catch / log等。

同样,这是有争议的,决定可能会受个案情况的影响。

感谢大家的回复。

2 个答案:

答案 0 :(得分:0)

我不能谈论性能成本,但我会说最好不要使用异常来驱动应用程序逻辑。

例外就是例外情况。如果您可以在代码中编程和解释您的推理,那么这比使用异常更好。

public String substringOnComma(String value) {
    String abc = "";

    if (value != null) {
        if (containsComma(value) {
            int index = value.lastIndexOf(',');
            abc = value.substring(0, index);
        }
    }

    return abc;
}


public boolean containsComma(String value) {
    boolean comma = false;

    if (value.lastIndexOf(',') != -1) {
        comma = true;
    }

    return comma;
}

答案 1 :(得分:0)

出于性能和可维护性的原因,最好检查值而不是捕获异常。检查值是否为-1是现代CPU的单个指令,根据方法的不同,抛出和捕获异常可能有数百个。