Я не знаю точно, но я представляю, что Java выполняется как любая другая основанная на стеке среда выполнения. Это означает, что передача элементов в качестве параметров в метод выполняется легко, просто помещая их в стек перед передачей управления методу. Возвращаемые значения, вероятно, обрабатываются в ВМ, как это делают C и C ++ - возвращаемое значение всегда помещается в регистр, который по своей природе однозначен.
Это не большая проблема, потому что с универсальными значениями возвращение нескольких значений может быть обработано безопасным для типа способом, возвращая экземпляр чего-то вроде Tuple<type1, type2, type3>
, что не является слишком большой нагрузкой для большинства случаи.