Java не компилируется непосредственно в машинный код, она компилируется в байт-код, который затем либо интерпретируется, либо компилируется в машинный код во время выполнения - я понятия не имею, как получить машинный код во время выполнения, я просто представляю его как эта огромная масса смещающихся, меняющихся байтов, которая в итоге просто выполняет DAMN быстро и надежно.
Небольшой вызов метода должен полностью компилироваться во время выполнения. Даже большой вызов метода может быть записан виртуальным машинным кодом как встроенный машинный код, если достаточное количество ссылок может быть разрешено или проигнорировано.
Использование Final может очень помочь, потому что дает подсказки виртуальной машине о том, как можно оптимизировать еще больше.
Поскольку вызов метода на самом деле может быть полностью скомпилирован и в лучшем случае имеет минимальную стоимость - вам действительно не стоит об этом беспокоиться. Просто используйте лучший код и беспокойтесь о проблемах с производительностью, когда у вас есть неверная спецификация производительности (в этот момент точечная оптимизация сделает НАМНОГО лучше, чем попытка исключить вызовы методов в вашем коде, разрушая вашу кодовую базу для всех вовлеченных).
Обратите внимание, что из-за анализа времени выполнения в некоторых очень редких случаях он может быть быстрее, чем аналогичный код на C (компилятор c не будет профилировать во время выполнения и оптимизировать свой код вручную, вам придется сделать все возможное это сам).