No sé a ciencia cierta, pero me imagino que Java se ejecuta como cualquier otro tiempo de ejecución basado en la pila. Lo que significa que pasar elementos como parámetros a un método se hace fácilmente simplemente empujándolos a la pila antes de transferir el control al método. Es probable que los valores de retorno se manejen en la VM como C y C++, el valor de retorno siempre se coloca en un registro, que por naturaleza tiene un solo valor.
No es un gran problema, sin embargo, con los genéricos, la devolución de múltiples valores se puede manejar de forma segura devolviendo una instancia de Tuple<type1, type2, type3>
, que no es una carga demasiado pesada en la mayoría de los casos .
Realmente no ofrece ninguna solución a una forma eficiente de devolver múltiples argumentos tampoco. Para el registro, si quiero que un método sea capaz de devolver un argumento, paso una matriz en caché (longitud 1) del tipo requerido como argumento y lo configuro como el primer campo; alternativamente, puede devolver una matriz de objetos y usa eso, pero es creación de objetos innecesarios que quieres evitar. –