我可以在不牺牲性能的情况下通过在返回之前为变量赋值来改进调试吗?
Can I improve debugging by assigning value to variable before returning without sacrificing performance?
在 ~1k 次调用中,向以下类型的方法添加变量赋值(为了增强调试过程)是否会使执行速度减慢超过一秒(1k 毫秒)?
我的假设是否正确,即变量将超出范围并在方法完成执行时被垃圾回收?
重构此方法:
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;
}
这个小的重构可以改进调试过程;这将允许开发人员轻松检查 return 值并增强代码的可维护性。
其他资源
public String concatenate(String one, String two){
return one + two;
}
我认为可以公平地说,与该变量声明和赋值相关的任何性能成本都可以完全忽略不计。
当您调用连接方法时,返回的值是对实际字符串数据的引用。字符串数据本身保存在堆上。在您列出的任何一种情况下都会发生这种情况。
变量returnValue
只是对字符串的引用;它 不是 字符串的副本,因此它的内存占用非常低。此外,returnVariable
存储在堆栈中,因此甚至不需要进行垃圾回收。一旦超出范围,它就会从堆栈中弹出。
无论哪种方式,由于字符串连接(以及字符串在堆上的存储),大部分复杂性(在时间和 space 方面)都会发生。所以最重要的是,这可能不是您应该担心的成本。
在 ~1k 次调用中,向以下类型的方法添加变量赋值(为了增强调试过程)是否会使执行速度减慢超过一秒(1k 毫秒)?
我的假设是否正确,即变量将超出范围并在方法完成执行时被垃圾回收?
重构此方法:
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;
}
这个小的重构可以改进调试过程;这将允许开发人员轻松检查 return 值并增强代码的可维护性。
其他资源
public String concatenate(String one, String two){
return one + two;
}
我认为可以公平地说,与该变量声明和赋值相关的任何性能成本都可以完全忽略不计。
当您调用连接方法时,返回的值是对实际字符串数据的引用。字符串数据本身保存在堆上。在您列出的任何一种情况下都会发生这种情况。
变量returnValue
只是对字符串的引用;它 不是 字符串的副本,因此它的内存占用非常低。此外,returnVariable
存储在堆栈中,因此甚至不需要进行垃圾回收。一旦超出范围,它就会从堆栈中弹出。
无论哪种方式,由于字符串连接(以及字符串在堆上的存储),大部分复杂性(在时间和 space 方面)都会发生。所以最重要的是,这可能不是您应该担心的成本。