Creo que realmente depende del idioma y de la función. Si bien los compiladores c y c ++ pueden incorporar muchas funciones, este no es el caso de Python o Java.
Si bien no conozco los detalles específicos de Java (excepto que todos los métodos son virtuales, pero le sugiero que verifique mejor la documentación), en Python estoy seguro de que no hay en línea, no hay optimización de recursión de cola y las llamadas a funciones son bastante caras.
Las funciones de Python son básicamente objetos ejecutables (y de hecho también puede definir el método call () para hacer que una instancia de objeto sea una función). Esto significa que hay bastante sobrecarga al llamarlos ...
PERO
cuando define variables dentro de funciones, el intérprete usa LOADFAST en lugar de la instrucción LOAD normal en el código de bytes, haciendo que su código sea más rápido ...
Otra cosa es que cuando define un objeto invocable, son posibles patrones como la memorización y pueden acelerar mucho su cálculo (a costa de usar más memoria). Básicamente siempre es una compensación. El costo de las llamadas de función también depende de los parámetros, porque determinan la cantidad de material que realmente tiene que copiar en la pila (por lo tanto, en c / c ++ es una práctica común pasar parámetros grandes como estructuras por punteros / referencia en lugar de por valor).
Creo que su pregunta es en la práctica demasiado amplia para ser respondida completamente en stackexchange.
Lo que le sugiero que haga es comenzar con un idioma y estudiar la documentación avanzada para comprender cómo las llamadas de función son implementadas por ese lenguaje específico.
Te sorprenderá la cantidad de cosas que aprenderás en este proceso.
Si tiene un problema específico, realice mediciones / perfiles y decida el clima, es mejor crear una función o copiar / pegar el código equivalente.
Si hace una pregunta más específica, creo que sería más fácil obtener una respuesta más específica.