Ответ 1
Некоторые существенные поиски раскрывают этот интересный небольшой фрагмент (я действительно получил до страницы 4 Google поиск):
if (inline_depth() > MaxInlineLevel) {
return "inlining too deep";
}
if (method() == callee_method
&& inline_depth() > MaxRecursiveInlineLevel) {
return "recursively inlining too deep";
}
Что свидетельствует о том, что MaxInlineLevel
является ожидаемым жестким пределом того, насколько глубоко вы идете до того, как перестанете встраивать. Он также предполагает, что MaxRecursiveInlineLevel
относится только к прямым рекурсивным вызовам, а не к рекурсивным вызовам, таким как foo()
вызывает bar()
, который вызывает foo()
.
Итак, я думаю, что я был прав в своем комментарии догадки - MaxInlineLevel
заключается в защите от рекурсии взаимной, потому что обнаруживать, что вам нужно будет поддерживать ссылки на всю глубину стека вызовов inlining.
MaxInlineResursionLevel
управляет foo()
вызывает foo()
вложение.
Обратите внимание, что ссылочный код не может быть реальной JVM.
Комментарии @apangin обнаруживают более современную версию точки доступа из Open JDK 8, говорят о том, что в настоящее время это уже не так просто. Похоже, что полный стек ищет рекурсивные вызовы, поэтому взаимная рекурсия также может быть заблокирована от прохождения MaxRecursiveInlineLevel
.