Odpowiedź jest nieco zależna od architektury. Na architekturze x86 nie ma dodatkowego narzutu związanego z lotnymi odczytami, choć istnieją implikacje dla innych optymalizacji.
JMM cookbook from Doug Lea, see architecture table near the bottom.
Dla wyjaśnienia: Nie ma żadnego dodatkowego obciążenia związane ze się czytać. Bariery pamięci stosowane są w celu zapewnienia właściwego porządku. JSR-133 klasyfikuje cztery bariery "LoadLoad, LoadStore, StoreLoad i StoreStore". W zależności od architektury niektóre z tych barier odpowiadają "no-op", co oznacza, że nie podejmuje się żadnych działań, inne wymagają ogrodzenia. Nie ma żadnych niejawnych kosztów związanych z samym obciążeniem, chociaż można go ponieść, jeśli na miejscu znajduje się ogrodzenie. W przypadku x86 tylko bariera StoreLoad powoduje powstanie ogrodzenia.
Jak wskazano w poście na blogu, fakt, że zmienna jest niestabilna, oznacza, że istnieją założenia dotyczące natury zmiennej, która nie może być już wykonana, a niektóre optymalizacje kompilatora nie zostałyby zastosowane do zmiennej.
Niestabilność nie jest czymś, co należy stosować płynnie, ale nie należy się jej również obawiać. Istnieje wiele przypadków, w których niestabilna wola zastąpi bardziej rygorystyczne blokowanie.
Czy możesz dodać "java" gdzieś w pytaniu? Nie było zamieszania z C - samo ustawienie słowa kluczowego wydaje się niewystarczające. –
wydaje się być tam teraz – pdeva