2012-04-29 3 views
2

Можно создать дубликат:
Technique or utility to minimize Java “warm-up” time?превышение скорости время прогрева JVM

Я знаю, что JVM занимает некоторое время, чтобы "разогреть", в зависимости от размера кода. Мой вопрос: есть ли способ, с помощью которого программист может помочь ему ускорить процесс «разогрева», указав как-то возможные разделы кода, на которые нужно смотреть?

+3

[тот же вопрос] (http://stackoverflow.com/questions/1481853/technique-or-utility-to-minimize-java-warm-up-time) –

+0

Пожалуйста, ознакомьтесь с моим предложением http://stackoverflow.com/questions/1481853/technique-or-utility-to-minim-java-warm-up-time/10383192 # 10383192 - возможно, это сработает и для вас. –

ответ

2

Вы можете косвенно вызывать код много раз. Значение по умолчанию -xx:CompileThreshold= равно 10000. Таким образом, вы можете многократно вызывать критический код, например. 12 000 раз.

Вы можете уменьшить порог компиляции, но вы по-прежнему имеют те же проблемы, ее просто, что цикл может быть сказать, 1000 вместо 10000.

Одна из причин вы хотите разминочных код, чтобы оптимизировать его, но если вы сократите количество итераций, некоторые из оптимизаций могут не выполняться, и вы можете получить субоптимальный вызов (но не всегда)

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

+0

Почему бы не изменить параметр на меньшее число? – assylias

+1

@assylias Хороший вопрос, добавленный к моему ответу. –

+2

Питер, я был бы очень осторожен в предоставлении этого совета. Количество случаев, когда я думаю, что это хорошая идея для настройки CompileThreshold, очень мала. Имеются также взаимодействия - например, если кеш-код заполняется, тогда пользователь может упустить возможность скомпилировать важные методы (например, подумать о том, как может работать приложение Spring). Мы должны сделать некоторые эксперименты. – kittylyst

0

Возможно, вы захотите рассмотреть компилятор с опережением времени, например. gcj, который позволяет вам скомпилировать набор классов в собственный код при создании приложения и запускать только загруженные классы, запущенные во время работы на виртуальной машине. Производительность после компиляции завершена не так хорошо (особенно если вы тратите много времени на код, загруженный во время выполнения), но для программ с коротким временем выполнения преимущество предварительного компиляции больше, чем смещение.

0

На developerWorks есть хорошее приложение article, посвященное измерению микропроизводительности на Java. Он также охватывает тему «разминки» и других связанных вещей. Автор реализовал неплохую основу для микро-бенчмаркинга на Java. Эта структура также касается фазы разминки JVM и пытается ускорить ее и завершить ее до начала фактических тестов. Исходный код рамки также доступен, поэтому вы можете посмотреть, как это реализовано.