Java优化:局部变量或函数调用

时间:2012-10-03 09:26:04

标签: java variables optimization

你会做什么?

 doThings(folder.getInstructions()) ;
 for (Instruction instruction : folder.getInstructions()) {
    // do things
 }
functionCall(folder.getInstructions()) ;

或者这个:

instructions = folder.getInstructions() ;
doThings(instructions)
for (Instruction instruction : instructions) {
  // do things
}
functionCall(instructions) ;

最重要的是,我想知道何时将值存储在局部变量中更有效,以及什么时候更好地进行函数调用。

5 个答案:

答案 0 :(得分:21)

更具可读性更高效。临时表达式和局部变量需要相同的空间,从CPU / JVM的角度来看,它没有太大的区别。 JVM将更好地优化/使用它。

但是,如果getInstructions()方法调用很昂贵,缓存它在局部变量中。如果它只是一个简单的吸气剂,它无论如何都会被内联。此外,恕我直言,在您的特定情况下,局部变量 更具可读性,如果getInstructions()随着时间的推移可能会有不同的结果,则可能更正确。

答案 1 :(得分:10)

这完全取决于getInstructions()的作用。如果它只是返回字段的值 - ,如果您确信字段值不会在调用之间发生变化 - 那么您可能看不到两个片段之间的任何效率差异。 / p>

另一方面,如果getInstructions()需要发出十几个网络请求,那么显然你想避免多次打电话。

可读性比效率更重要。在这种情况下,我发现第二个选项无论如何都更具可读性 - 您希望采用具有相同值的三个单独步骤(两个方法调用和一个循环)更清楚。另一方面,我很高兴写出类似的东西:

for (int i = 0; i < text.length(); i++) {
    ...
}

而不是将 分成一个单独的变量:

int length;
for (int i = 0; i < length; i++) {
    ...
}

这实际上取决于背景。有时,从可读性的角度来看,额外的变量有助于(有时不会)。 效率透视图完全取决于方法调用的作用,以及它是否对JIT来说是“无法解决的”。

答案 2 :(得分:0)

每当你想要多次使用方法的结果时,最好将方法调用的结果存储在某个临时变量中。这样可以节省方法调用的处理时间。这不会影响到这个case ..但是当有很多调用时可能会影响..

另外,请记住,您的本地变量存储在stack上。因此,拥有临时局部变量会占用堆栈空间。虽然这在像这样的小案例中并不是很重要..但是应该避免不必要的局部变量..

因此,这两种方法都有专业缺点 ..

答案 3 :(得分:0)

我的回答取决于我正在尝试开发的类型的应用程序。例如,

如果值在应用程序期间快速更改,第一个代码块会更好。如果您需要准确的结果,这很好。

如果你确定最初提取的值不会影响代码的其他部分,那么第二个就好了。

答案 4 :(得分:0)

我认为这取决于具体情况。如果它需要多次调用相同的方法(并且你得到相同的值)并且更好地进行一次调用并将其存储到某个局部变量中。

如果您只需要调用该函数一次。无需去寻找局部变量。