Как заставить или помочь компиляторам Java оптимизировать код? - PullRequest
1 голос
/ 09 ноября 2010

Мне интересно, какие оптимизации компиляторов Java обычно могут быть заблокированы (или не обнаружены) из-за непонятного или плохо написанного кода, и какие ошибки общего характера делают, что запутывает код для компилятора

Ответы [ 3 ]

3 голосов
/ 09 ноября 2010

Пожалуйста, поймите, что современные среды выполнения (собственно команда Java) не выполняют наивно байт-коды java один за другим, но выполняют очень тяжелую обработку для компиляции с реальным машинным кодом.

Это означает, что нет особой причины делать байт-код особенно умным или оптимизированным, поскольку JRE в любом случае дает те же результаты. Для мобильных устройств Java, где интерпретатор менее умен и присутствуют ограничения памяти, система ProGuard позволяет оптимизировать преобразования. Вы можете найти это интересным.

1 голос
/ 09 ноября 2010

JIT-компиляторы обычно оптимизированы для общих шаблонов кодирования и вариантов использования.Лучше всего придерживаться общих соглашений, шаблонов и идиом.Попытка «оптимизировать код для компилятора» может привести к коду, который на самом деле сложнее оптимизировать.

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

0 голосов
/ 09 ноября 2010

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

Для виртуальных машин Sun HotSpot единственная ошибка, которую вы можете сделать в общем смысле, - это попытаться сделать что-то хитрым образом (возможно), полагая, что это делает ваш код быстрее. Лучше всего просто написать простой код. Я видел этот совет от кого-то старшего в команде HotSpot.

Рекомендуется оставлять оптимизацию JIT-компилятору и пытаться микрооптимизировать только в том случае, если профилировщик скажет вам, что у вас проблема.

(Есть хорошо известные вещи, которых вам следует избегать, например, использование исключений для управления потоком, выполнение конкатенации строк в цикле или попытка управления собственной памятью. Но это, вероятно, более высокий уровень, чем вы заинтересованы) 1009 *

...