Длина цикла для локальной переменной микрооптимизация? - PullRequest
1 голос
/ 09 апреля 2011

Во многих языках программирования и их микрооптимизациях я видел, что объявление длины массива внутри цикла for влияет на производительность, особенно в PHP и JavaScript:

for i = 0, length = arr.length; i < length; ++i

IЯ видел этот формат, используемый в C ++ и некоторых исходных кодах Java.Является ли эта микрооптимизация верной для всех языков программирования?Если это не зависящая от языка микрооптимизация, разве она не должна быть оптимизирована из компиляторов?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2011

Проблема для компилятора заключается в том, что arr.length будет возвращать одно и то же на каждой итерации цикла.Иногда это не так, например, когда тело цикла вставляет новые элементы в arr.

0 голосов
/ 09 апреля 2011

Ну, я думал, что компилятор Java позаботится об этом виде оптимизации, но это не так:

public static void main(String[] args) {
    String[] array = new String[10000000];
    Arrays.fill(array, "Test");
    long startNoSize = Calendar.getInstance().getTimeInMillis();
    for(int i=0; i< array.length;i++)
    {
        array[i]=String.valueOf(i+1);
    }
    long finishNoSize = Calendar.getInstance().getTimeInMillis();
    System.out.println(finishNoSize-startNoSize);
    System.out.println("Size saved");
    int length = array.length;
    long startSize = Calendar.getInstance().getTimeInMillis();
    for(int i=0; i< length;i++)
    {
        array[i]=String.valueOf(i+2);
    }
    long finishSize = Calendar.getInstance().getTimeInMillis();
    System.out.println(finishSize-startSize);
}

После нескольких последовательных прогонов результат выглядит так:

6207
Size saved
4594

Таким образом, разница составляет 1500 миллисекунд.

UPDATE Когда циклы меняются местами, результат тоже меняется :) Так что нет проблем с отсутствием оптимизации.

Так что в Java вызов Container.size не влияет на производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...