我可以通过在返回之前为变量赋值而不牺牲性能来改进调试吗?

时间:2016-02-11 14:18:20

标签: java performance debugging maintainability

将变量赋值(为了增强调试过程的目的)添加到以下类型的方法是否会使~1k次调用的执行速度减慢一秒以上(1k ms)?

我在假设中是否正确该变量将超出范围并在方法完成执行时被垃圾收集?

重构此方法:

public String concatenateOneOrTwo(String input, boolean one){
    if(one){
        return concatenate(input, "one");
    }else{
        return concatenate(input, "two");
    }
}

对于这样的事情:

public String concatenateOneOrTwo(String input, boolean one){
    String returnValue = "";

    if(one){
        returnValue = concatenate(input, "one");
    }else{
        returnValue = concatenate(input, "two");
    }

    return returnValue;
}

这个次要的重构可以改善调试过程;这将允许开发人员轻松检查返回值并增强代码的可维护性。

其他资源

public String concatenate(String one, String two){
    return one + two;
}

1 个答案:

答案 0 :(得分:2)

我认为可以公平地说,与变量声明和赋值相关的任何性能成本都可以完全忽略不计。

调用concatenate方法时,返回的值是对实际字符串数据的引用。字符串数据本身保存在堆上。这种情况发生在您列出的任何一种情况中。

变量returnVariable只是对字符串的引用;它是字符串的副本,所以它的内存占用非常低。此外, $scope.doctors=[{patch:'BARIJPUR',doctor:'RAMA SENA',doctor:'SMRITI IRANI',doctor:'JAGDISH NAIR', patch:'KIRI',doctor:'ASHISH NAIK',doctor:'SMRITI IRANI',doctor:'SAIRAJ NAIK', patch:'JAMNAGAR',doctor:'RATAN PANDEY',doctor:'RAMAN SHIVOLKAR' }]; 存储在堆栈中,因此甚至不需要进行垃圾回收。一旦超出范围,它就会从堆栈中弹出。

无论哪种方式,由于字符串连接(以及字符串在堆上的存储),大部分复杂性(时间和空间)都会发生。如此底线,这可能不是你应该担心的成本。