Как Dalvik VM сохраняет и восстанавливает свои регистры между вызовами методов? - PullRequest
8 голосов
/ 04 января 2012

Семантически виртуальная машина Dalvik имеет новый набор регистров для каждого метода и не имеет инструкций для доступа к стеку вызовов. Но с точки зрения его реализации регистры должны быть каким-то образом сохранены при вызовах методов и восстановлены при возвратах методов. Как это делает (реализация Google) Dalvik?

Ответы [ 2 ]

5 голосов
/ 04 января 2012

Регистры, на которые ссылается байт-код dalvik, вовсе не являются машинными регистрами, а фактически являются расположениями в стеке вызовов.Всякий раз, когда вы вызываете метод, dalvik выделяет достаточно памяти в кадре стека этого метода для хранения всех регистров, в которых нуждается этот метод.

Обратите внимание, что не все вычисления немедленно изменят значение в стеке, очевидно, что vmзагрузить значения в машинный регистр для выполнения расчетов.Результаты могут быть сохранены в машинном регистре для последующего использования без немедленной записи их обратно в соответствующее местоположение стека по усмотрению ВМ.Значения будут сброшены обратно в стек вызовов, если и когда это необходимо (т. Е. Когда вы вызываете в другой метод, используете различные конструкции синхронизации или ему нужен регистр для другого вычисления и т. Д.).

1 голос
/ 04 января 2012

Вот исходный репозиторий для dalvik, вы можете пошагово изучить реализацию. Android-источник

...