Например, x86 выталкивает адрес возврата в стек, а затем (по возвращении) выдает его. Как JVM решает эту проблему? Заранее спасибо.Как возвращается JVM из функции
ответ
Если вы имеете в виду инструкции прыжковых jsr
, jsr_w
и их ret
они ведут себя так же, как это происходит на x86, обратный адрес и параметры помещаются в стек и адрес возврата извлекается оттуда при возвращении.
Но важно отметить, что здесь мы говорим о миниатюрных подпрограммах, а не о методах Java.
Звонки на Java-методы выполняются с помощью конкретных инструкций байт-кода invoke_*
, которые могут различаться в зависимости от используемого вами jvm-устройства и должны обрабатывать намного больше (например, разрешение виртуальных функций), чем то, что требуется для простых инструкций перехода.
Они все равно будут использовать стек и определить новый кадр вызова для каждого вызова метода, но операция возврата из функции будет обрабатываться непосредственно реализацией invoke_*
, целевой Java-метод просто должен правильно сохранить возвращаемое значение на его стеке.
JVM не скомпилирован для сборки. –
Я знаю это. Это не имеет ничего общего. – Gilgamesz
Знаете ли вы, как читать байт-код Java? [Здесь] (https://en.wikipedia.org/wiki/Java_bytecode#Example) - очень, очень простой праймер. –