Оптимизация виртуальной машины

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

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

21.08.2008 14:41:31
7 ОТВЕТОВ
РЕШЕНИЕ

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

5
17.12.2009 18:50:57

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

0
3.07.2012 13:22:36

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

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

3
21.08.2008 14:52:55

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

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

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

3
17.09.2008 00:36:35

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

2
3.07.2012 13:22:57

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

1
18.12.2008 12:24:37

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

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

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

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

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

0
3.07.2012 13:22:50