Модель памяти Dalvik такая же, как у Java? - PullRequest
30 голосов
/ 03 января 2011

Модель памяти Dalvik такая же, как Java ?Меня особенно интересует, являются ли чтение и запись справочных и не long / не- double примитивных переменных атомарными, но я также хотел бы знать, есть ли какие-либо различия между моделями памяти двух платформ.*

Ответы [ 3 ]

60 голосов
/ 06 января 2011

Начиная с 4.0 (Ice Cream Sandwich), поведение Дальвика должно совпадать с JSR-133 (модель памяти Java).

Начиная с версии 3.0 (Honeycomb), большинство частей были на месте, но были упущены некоторые незначительные вещи, с которыми будет трудно столкнуться на практике (например, некоторые крайние случаи в финализации).

Начиная с 2.3 (Gingerbread), Dalvik, как правило, был верен для однопроцессоров, но некоторые ключевые функции, необходимые для правильного поведения на оборудовании SMP (например, правильная final обработка полей), отсутствовали.

До Gingerbread, вообще не было никаких барьеров памяти, и базовые вещи вроде volatile long были сломаны.

13 голосов
/ 04 января 2011

В источнике Dalvik есть документ , в котором говорится:

С точки зрения фрагмента кода, написанного на языке программирования Java или нацеленного таким же образом на файлы .class, виртуальная машина Dalvik стремится вести себя так, чтобы полностью соответствовать определению языка. То есть код, выполняемый в Dalvik, будет вести себя так же, как и на любой другой виртуальной машине.

Что должно означать, что поведение такое же, как в надлежащей Java. Является ли это на самом деле или нет, я понятия не имею.

0 голосов
/ 03 января 2011

В спецификации сказано, что все операции с 32-битными числами (не двойные, не длинные) являются атомарными.Нет гарантии, что операции с 64-битными числами также являются атомарными.

...