我曾经听说PHP和Java之间的区别在于PHP,以下更有效地存储foo()
的返回值,而不是每次评估循环的条件语句时调用它:
$x = 1;
for($y = 0; $y < foo($x); $y++)
{
//code goes here
}
VS
$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 Optimizer或JIT编译器是否知道如何处理此问题,还是应该创建一个保存numberOfOperators()
返回值的新变量?
答案 0 :(得分:2)
不,它不会缓存&#39;或者其他的东西。编译器怎么可能知道,如果在numberOfOperators()
的下一次调用中,会有相同或不同的结果?
答案 1 :(得分:2)
JIT可以内联并优化方法调用,但前提是它相对简单,例如字段查找。
在尝试优化代码之前,应该通过CPU和/或内存分析器运行它,当您测量了性能时,就可以决定如何优化代码。其他任何东西都只是在猜测什么会有所作为。
简而言之,当您知道自己遇到问题并因为测量时,请使代码清晰易懂,并担心性能问题。