Параметр JVM для оптимизации операторов цикла

В школе мне говорили, что изменять индексную переменную цикла for :

Пример:

for(int i = 0 ; i < limit ; i++){
    if(something){
        i+=2;      //bad
    }
    if(something){
        limit+=2;      //bad
    }
}

Аргумент - плохая практика. заключалась в том, что некоторая оптимизация компилятора может оптимизировать цикл и не пересчитывать индекс и привязку в каждом цикле.

Я провел несколько тестов в java , и кажется, что по умолчанию index и привязка пересчитываются каждый раз.

Мне интересно, можно ли активировать эту функцию в JVM HotSpot ?

Например, чтобы оптимизировать этот вид цикла:

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

без необходимо написать:

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

Это просто пример, мне любопытно попробовать и увидеть улучшения.

РЕДАКТИРОВАТЬ

Согласно ответу Питера Лоури , почему в этом простом примере JVM не встроена getLenght () метод? :

public static void main(String[] args) {
   Too t = new Too();
   for(int j=0; j<t.getLength();j++){
   }
}


class Too {

    int l = 10;
    public Too() {
    }
    public int getLength(){
        //System.out.println("test");
        return l;
    }
}

На выходе "test" печатается 10 раз.

Я думаю, было бы неплохо оптимизировать этот вид выполнения.

РЕДАКТИРОВАТЬ 2: Кажется, я неправильно понял ...

Я удалил println , и профилировщик действительно сказал мне, что метод getLength () в этом случае даже не вызывается.

7
задан Peter Lawrey 16 April 2016 в 18:52
поделиться