Подтвердить что ты не робот

Модель памяти Dalvik такая же, как Java?

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

4b9b3361

Ответ 1

Начиная с 4.0 (сэндвич с мороженым) поведение Dalvik должно совпадать с JSR-133 (модель памяти Java).

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

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

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

Ответ 2

В источнике Dalvik есть который гласит:

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

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

Ответ 3

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