Java メモリ モデルでは、a の書き込みint
はアトミックであることが義務付けられています。つまり、あるスレッドで値 (4 バイトで構成される) を書き込み、別のスレッドでそれを読み取ると、すべてのバイトを取得するか、まったく取得しませんが、2 つの新しいバイトと2古いバイトなど。
については保証されませんlong
。0x1122334455667788
ここで、前に保持されている変数に書き込むと、0
別のスレッドで0x112233440000000
orが読み取られる可能性があります0x0000000055667788
。
現在、仕様では、オブジェクト参照が int または long サイズのいずれかである必要はありません。型の安全性の理由から、アトミックに書き込まれることが保証されていると思いますが、64 ビット VM では、これらの参照は 64 ビット値 (単なるメモリ アドレス) である可能性があります。
ここに私の質問があります:
- これをカバーするメモリモデルの仕様はありますか (私は見つけていません)?
- 長時間書き込みは 64 ビット VM でアトミックである疑いがありますか?
- VM は参照を 32 ビットにマップする必要がありますか?
よろしく、ステフェン