【发布时间】:2014-08-15 07:28:05
【问题描述】:
我曾经听说 PHP 和 Java 的区别在于 PHP 存储 foo() 的返回值比每次执行循环的条件语句时调用它更有效:
$x = 1;
for($y = 0; $y < foo($x); $y++)
{
//code goes here
}
对
$x = 1;
$processed = foo($x);
for($y = 0; $y < $processed; $y++)
{
//code goes here
}
在 Java 中,何时值得创建一个仅用于测试条件语句的变量(并且值永远不会改变)。例如,在我现在正在进行的一个项目中,有
int[] operator = new int[numberOfOperators(eqn)];
int[] numeric = new int[numberOfOperators(eqn) + 1];
for(int i = 0; i < operator.length; i++)
{
//code goes here
}
Java 优化器或 JIT 编译器会知道如何处理这个问题,还是应该创建一个新变量来保存 numberOfOperators() 的返回值?
【问题讨论】:
-
数组长度是一个属性,而不是一个函数。
-
@DaveNewton 没错。为什么你不这么认为?我想知道的一件事是从属性中获取值与从变量中获取值一样快?
-
这取决于
numberOfOperators方法的实现。 JIT 可以内联方法并消除冗余代码。在某些情况下,JIT 可能会为您进行优化。 -
@Celeritas 我没有不这么认为。您正在比较两个完全不同的事物:方法调用和属性访问。至少我一开始是这么想的;但您问的是
numberOfOperators,其返回值可能会在后续调用之间发生变化。 -
当您尝试两种方式并测量速度差异时会发生什么?稍加努力,您就可以成为专家!
标签: java performance optimization jit