производительность путем создания новой переменной - PullRequest
1 голос
/ 05 мая 2011

Я хочу написать свою Java-программу как производительную, насколько я могу, поэтому я сокращаю все, чтобы добиться максимальной производительности ... В программе метод будет называться ок. 9 миллионов раз. там я должен что-то вычислить, просто вычитая два целых числа, и они нужны дважды. поэтому мой вопрос, что быстрее: инициализировать новое целое число с результатом вычисления или просто вычислить значения дважды? например:

int result = a-b;
methodToCall(result, foo, bla);
otherMethod(result, bla, foo);

или

methodToCall(a-b, foo, bla);
otherMethod(a-b, bla foo);

Я не вижу разницы напрямую, но иногда с первым методом немного быстрее ... в общем: всегда ли первый метод лучше? например, при использовании других типов расчетов (более сложных). Компилятор java или jvm что-то делают для его оптимизации, например видите, что я делаю один и тот же расчет дважды и делаю это только один раз и кэширую результат самостоятельно?

Ответы [ 3 ]

4 голосов
/ 05 мая 2011

Первый будет теоретически будет быстрее.

Во втором случае JVM не только дважды вычислит a-b, но также временно назначит хранилище для результата дважды перед передачей его двум вызовам метода.

Я только что провел тесты для этих случаев 100 миллионов раз и обнаружил разницу между ними всего в 10-15 мс, причем первая была быстрее. Результаты моего теста будут искажены, потому что a и b являются константами, но, тем не менее, это подтверждает теорию.

3 голосов
/ 05 мая 2011

Просто измерьте время.Не зная фактов, вы не можете сделать какие-либо выводы.См. этот вопрос об инструментах.

Если разницу трудно заметить, всегда предпочитайте хорошо читаемый код.

1 голос
/ 05 мая 2011

JVM может оптимизировать код во втором случае, чтобы он действовал как первый. Однако, если это не так, это может стоить вам 1 тактового цикла, который может составлять около 3 мс (если вы вызываете его 9 миллионов раз на процессоре 3 ГГц)

Я предпочитаю первую форму, потому что она уменьшает количество повторений, что для меня облегчает чтение. Если ваше выражение стоит дороже, оно может иметь большее значение.

...