JIT оптимизация Hotspot и «де-оптимизация»: как заставить FASTEST? - PullRequest
3 голосов
/ 08 апреля 2011

У меня БОЛЬШОЕ приложение, которое я пытаюсь оптимизировать. для этого я профилирую / тестирую небольшие его элементы, выполняя их миллионы раз в цикле и проверяя время их обработки.

очевидно, JIT Hotspot начинает действовать, и я действительно могу видеть, когда это произойдет. Мне это нравится, я могу ясно видеть, что дела идут намного быстрее после периода «разогрева».

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

то, что выполняется в цикле, на самом деле не сильно меняется, поэтому я с трудом могу понять, почему escape-анализ вызвал бы «де-оптимизацию» кода.

По сути, я чувствую, что JIT получает лучшую производительность, а затем соглашается на что-то более медленное, думая, что этого "достаточно".

есть ли способ сказать ему: "Этого недостаточно, я действительно хочу, чтобы этот код выполнялся как можно быстрее!" Я знаю, что может, как это уже было. Как я могу заставить это сделать?

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

Невозможно отследить с помощью сборки «product» (читай нормально выпущенной), я бы пропустил код через yourkit и посмотрел, что происходит, hotspot всегда будет пытаться получить наилучшую возможную оптимизацию.

Это будет идти медленнее, только если у вас есть код, который вызывает де-оптимизацию в jit, в профилировщике вы сможете увидеть это как такие вещи, как большое количество выделений, огромное количество исключений.

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

Вы должны использовать VisualVM , чтобы найти утечки памяти и проблемы с использованием процессора, которые поставляются с JDK. Это очень хорошо для профилирования и имеет много плагинов. Вы также можете запускать VisualVM из Eclipse автоматически при запуске приложения. Netbeans, вероятно, имеет нечто подобное. Это также не сильно влияет на производительность, при условии, что вы используете выборку, а не профилирование.

Раньше я предпочитал JRockIt Mission Control над этим (с JRockIt VM), но сейчас это работает.

VisualVM

...