В конце лета в JIT внесли изменение, учитывающее семантику методов, которые не содержат
return. Грубо говоря, теперь методы, не возвращающие нормально управление обратно в вызывающий их код, помечаются флагом
DOES_NOT_RETURN.
Вот здесь можно почитать подробнее:
Do not inline methods that never return
Соответственно, предлагаю вынести
throw Exception из внутреннестей Code/EnumCode и других методов в отдельный класс, например, в ThrowHelper.
Что это дает? Сейчас методы из набора
Code инлайнятся, что очень правильно, так как позволяет с экономить на вызовах и/или избежать самих проверок. В случае, когда джит удаляет проверки проблем нет. Они возникают, если джит не может их устранить. В этом случае, вместе с встраиванием ассерта инлайнится и код, генерирующий исключение. Ассемблерный листинг показывает, что генерация исключений спокойно может раздуть код в несколько раз, для маленьких методов так вообще в 10-15 раз.
В целом, для текущего джита все останется примерно так же как сейчас, от нового мы получим профит
![](/Forum/Images/user.gif)
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>