java - 简单的循环性能问题

标签 java php performance

假设我有一个像这样的简单 PHP 循环

// Bad example
$array = array('apple','banana','cucumber');
for ($i = 1; $i < count($array); $i++) {
    echo $array[$i];
}

我知道这是一个不好的做法。最好不要在循环内使用count()

// Nice example
$array = array('apple','banana','cucumber');
$limit = count($array);
for ($i = 1; $i < $limit; $i++) {
    // do something...
}    

在Java中,我会这样做

// Bad example?
String[] array = {"apple","banana","cucumber"};
for(int i = 0; i < array.length; i++){
    System.out.println(array[i]);
}

问题:上面这不是一种不好的做法吗?还是和下面的例子一样?

// Nice example?
String[] array = {"apple","banana","cucumber"};
int limit = array.length;
for(int i = 0; i < limit; i++){
    System.out.println(array[i]);
}

最佳答案

任何像样的编译器/解释器都应该自动优化第一个示例以匹配第二个示例(无论如何从语义上讲,如果不完全字面意思),并且可能第三个示例以匹配第四个示例。这称为循环不变优化,其中编译器识别出实体(变量、表达式等)在循环内不变(即不变)并将其删除到循环之外(宽松地说)。

如果曾经有过的话,这已经不再是不好的做法了。

关于java - 简单的循环性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8303339/

相关文章:

Java8 Stream List<Map<String,Object>> 分组依据和计数值

java - 亚马逊 AWS 教程?

c - 为什么在启用 GCC 优化的情况下,这段代码使用 strlen 的速度要慢 6.5 倍?

php - 使用ajax调用下载excel文件

php - 表格中的图片

java - JProfiler 中“热点” View 和“方法统计” View 中方法排序的差异

python - tensorflow : slow startup

java - BrowserWindowOpener 和动态 url/资源 VAADIN

java - 在这种情况下如何删除最后一个括号

php - 我想通过点击链接调用其他表的数据