Модель Java-модели требует, чтобы запись int
была атомарной: То есть, если вы пишете в нее значение (состоящее из 4 байтов) в одном потоке и читаете ее в другом, вы получите все байты или нет, но не 2 новых байта и 2 старых байта или таковых.
Это не гарантируется для long
. Здесь запись 0x1122334455667788
в переменную, содержащую 0
, может привести к тому, что другой поток будет читать 0x112233440000000
или 0x0000000055667788
.
Теперь спецификация не требует, чтобы ссылки на объекты были либо int, либо длинными. По причинам безопасности по типу я подозреваю, что они гарантированно будут записываться атомарно, но на 64-битной VM эти ссылки могут быть очень хорошими 64-битными значениями (просто адресами памяти).
Теперь вот мои вопросы:
- Существуют ли какие-либо спецификации модели памяти, охватывающие это (что я не нашел)?
- Долго ли записи подозревают быть атомарными на 64-битных виртуальных машинах?
- Влияют ли виртуальные машины на сопоставление ссылок на 32-битные?
С уважением, Штеффен