Java >> Java tutorial >  >> Tag >> volatile

Hvorfor adgang volatile variabel er omkring 100 langsommere end medlem?

De flygtige medlemmer bliver aldrig cachelagret, så de læses direkte fra hovedhukommelsen.


Adgang til en volatile variabel forhindrer CPU'en i at omarrangere instruktionerne før og efter adgangen, og dette forsinker generelt udførelsen.


Adgang til volatile forhindrer en vis JIT-optimering. Dette er især vigtigt, hvis du har en løkke, som ikke rigtig gør noget, da JIT'en kan optimere sådanne løkker væk (medmindre du har et flygtigt felt) Hvis du kører løkkerne "lange" bør afvigelsen stige mere.

I en mere realistisk test kan du forvente volatile at tage mellem 30% og 10x langsommere for cirkalkode. I de fleste rigtige programmer gør det meget lidt forskel, fordi CPU'en er smart nok til at "indse", at kun én kerne bruger det flygtige felt og cache det i stedet for at bruge hovedhukommelsen.


Java tag