Оптимизация виртуальной машины - PullRequest
9 голосов
/ 21 августа 2008

Я возиться с игрушечным интерпретатором на Java , и я подумывал о попытке написать простой компилятор, который может генерировать байт-код для виртуальной машины Java. Что заставило меня задуматься, сколько оптимизации нужно сделать компиляторам, предназначенным для виртуальных машин, таких как JVM и CLI?

Компиляторы Just In Time (JIT) выполняют постоянное свертывание, оптимизацию глазка и т. Д.?

Ответы [ 7 ]

4 голосов
/ 21 августа 2008

Я просто добавлю две ссылки, которые довольно хорошо объясняют байт-код Java и некоторые из различных оптимизаций JVM во время выполнения.

3 голосов
/ 17 сентября 2008

Оптимизация - это то, что делает JVM жизнеспособными в качестве сред для долго работающих приложений, вы можете поспорить, что SUN, IBM и друзья делают все возможное, чтобы гарантировать, что они могут оптимизировать ваш байт-код и JIT-скомпилированный код максимально эффективным образом.

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

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

3 голосов
/ 21 августа 2008

Оптимизация байт-кода в большинстве случаев, вероятно, оксюморон

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

2 голосов
/ 17 декабря 2008

Обфускаторы, такие как ProGuard, выполнят много статических оптимизаций для вашего байт-кода для вас.

1 голос
/ 18 декабря 2008

Компилятор HotSpot оптимизирует ваш код во время выполнения лучше, чем это возможно во время компиляции - в конце концов, он имеет больше информации для работы. Единственный раз, когда вы должны оптимизировать байт-код, а не только свой алгоритм, - это когда вы нацеливаетесь на мобильные устройства, такие как Blackberry, где JVM для этой платформы недостаточно мощна для оптимизации кода во время выполнения и просто выполняет байт-код.

0 голосов
/ 31 декабря 2008

Примечание для Асерафима:

Также может быть полезно оптимизировать байт-код для не встроенных приложений в некоторых ограниченных случаях:

  1. При доставке кода по проводам, например, для приложений WebStart, чтобы минимизировать размер доставляемого файла / кэша и потому, что вы не обязательно знаете возможности / скорость клиента.

  2. Для кода, который, как вы знаете, критичен к производительности и использовался при запуске до (скажем), HotSpot успел собрать какую-либо статистику.

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

0 голосов
/ 21 августа 2008

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

...