Сколько «помощи» программиста обычно требуется Java для перехода на JIT к таблице диспетчеризации? - PullRequest
5 голосов
/ 29 сентября 2011

Я понимаю, что Java выполняет оптимизацию по всем направлениям и может оптимизировать коммутаторы в зависимости от того, сколько существует случаев, является ли коммутатор разреженным или плотным, и если код даже достаточно горячий, чтобы JIT оптимизировал указанный код. Мне просто интересно, нужно ли мне дополнительно предоставлять «помощь», например, использование поразрядно и для тестируемой переменной или сдвиг по битам переменной на «более хорошее» число, предполагая, что указанный код действительно очень горячий. «лучше» быть 0xXX, а не 0xFFXX. Есть ли в JIT-документах по горячим точкам, где конкретно указано, что требуется? Вместо того, чтобы «просто придерживаться общих рекомендаций по программированию ххх».

Ответы [ 3 ]

2 голосов
/ 01 октября 2011

Решение для tableswitch или lookupswitch уже принято компилятором javac. Я никогда не слышал, чтобы JIT пытался преобразовать lookupswitch в tableswitch.

Итак, вашим первым шагом должна быть проверка того, какой байт-код javac переведет ваш switch.

1 голос
/ 30 сентября 2011

На этот вопрос не будет простого ответа.

Я бы отнес этот вопрос к hotspot-dev - они могут предоставить больше информации о том, как это происходит.

Другие люди, которые могут иметь интересные взгляды на это, тусуются в списке рассылки jvm-l (Чарли Наттер, Реми Форакс, Джон Роуз и т. Д.)

0 голосов
/ 29 сентября 2011

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

Так что с Java вы получаете своего рода черный ящик, и оптимизировать больше рискованно, ИМХО.

Для технической документации Hotspot JIT см. Здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...