Question

I remember I read the somewhere before,but I can't find the offical document now.

are all instructions in jvm all atomic?

like:

iinc
iload
aload

all atomic?

Était-ce utile?

La solution

The bytecode instructions you mentioned (iinc, iload, aload etc.) operate on the values from the operand stack and on the local variables. These areas are thread-local (see JVMS 2.5, 2.6), that is, speaking about atomicity here is meaningless. I.e. they are NOT implemented using atomic CPU instructions like lock xadd, but nobody should care.

The bytecode instructions that read or write fields and array elements (getfield, putfiled, iastore etc.) are atomic except for long and double types (see JLS 17.7). 32-bit JVM may implement (actually, HotSpot JVM does implement) reading and writing of 64-bit fields with two 32-bit loads or stores, unless the field is declared volatile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top