ThrowHelper
От: rameel https://github.com/rsdn/CodeJam
Дата: 03.11.16 12:10
Оценка: 48 (1)
В конце лета в JIT внесли изменение, учитывающее семантику методов, которые не содержат return. Грубо говоря, теперь методы, не возвращающие нормально управление обратно в вызывающий их код, помечаются флагом DOES_NOT_RETURN.

Вот здесь можно почитать подробнее: Do not inline methods that never return

Соответственно, предлагаю вынести throw Exception из внутреннестей Code/EnumCode и других методов в отдельный класс, например, в ThrowHelper.

Что это дает? Сейчас методы из набора Code инлайнятся, что очень правильно, так как позволяет с экономить на вызовах и/или избежать самих проверок. В случае, когда джит удаляет проверки проблем нет. Они возникают, если джит не может их устранить. В этом случае, вместе с встраиванием ассерта инлайнится и код, генерирующий исключение. Ассемблерный листинг показывает, что генерация исключений спокойно может раздуть код в несколько раз, для маленьких методов так вообще в 10-15 раз.

В целом, для текущего джита все останется примерно так же как сейчас, от нового мы получим профит
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.