2016-12-14 2 views
1

Я понимаю, как работает on-stack replacement (OSR), но я не понимаю, полезен ли метод компиляции OSR, когда метод покидает начальный вызов, который вызвал компиляцию, - может ли JITed-код использоваться на последующей итерации ?Могут ли скомпилированные методы OSR использоваться последующим вызовом?

Кажется, он мог, как только интерпретатор перейдет к одному и тому же индексу байт-кода, который стартовал в OSR, он снова может ввести метод, скомпилированный OSR.

Я спрашиваю, главным образом, потому что я вижу случай, когда Hotspot немедленно OSR компилирует мой метод дважды (для разных BCI), но даже не выполняет компиляцию C2, отличную от OSR, до тех пор, пока она не будет запущена для пару минут (несмотря на миллион звонков или больше на метод). Поэтому мне интересно, использует ли он метод OSR C2 (существует также метод non-OSR C1)?

ответ

1

Да, они могут быть использованы повторно. Но только при одном и том же индексе байт-кода они были созданы для и только в ответ на ответное событие ветви политики компиляции.

Структура HotSpot InstanceKlass (внутреннее представление класса Java) содержит класс list of OSR methods. Всякий раз, когда запрашивается компиляция, CompileBroker looks for существующий NMethod в этом списке.

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

+0

Да, и, в конце концов, я не воспроизвел его - в дальнейшем прогон в основном показал, что горячий метод получает нормальный не-OSR C2 (уровень 4) в течение секунды или около того после запуска, поэтому я не уверен, что был поднят. Возможно, это был сбой в выходе LogCompilation (например, сбитый PrintAssembly, который одновременно писал?), Потому что _timing_, казалось, указывал, что он работает нормально. – BeeOnRope

+0

Возможно, вы имели в виду «на том же байткоде ** индекс **, они были созданы для ...» выше? – BeeOnRope

+0

@BeeOnRope Да, спасибо за исправление. – apangin

Смежные вопросы