[concurrency-interest] Volatile array and Wait
jmanson at cs.purdue.edu
Fri Oct 21 10:40:39 EDT 2005
Mike Skells wrote:
> My point for both of these issues is not whether a JIT _does_ make these
> tranformations, as much as is there a _specification_ that stops a JIT, java
> compiler, or AOT, AOP, or native compiler for that matter, from making that
> transformation. If the limitation is just in the current implmentation then
> it is unsafe.
> I cant remember seeing such a specification anywhere, although there is a
> lot of documentation out there ;-)
There is such a specification. The behavior of volatiles is dictated by
the rules described in the Java memory model, which is Chapter 17 of the
Java language specification, version 3 (as amended by JSR-133). Java
1.5/5.0 is compliant with this specification, although earlier versions
The rules state that if one thread writes to a volatile, and another
thread reads from that volatile, then all of the writes that happen
before the write by the first thread are ordered before and visible to
all of the reads that happen after the read by the second thread.
This requires memory synchronization and the cooperation of optimizing
compilers. No exception is made for redundant reads or writes.
As you say, if a variable is never read or written, it can be eliminated
(you can deduce there are no memory effects in this case). But, as
David pointed out, you have to be very, very sure that the variable is
never read or written.
More information about the Concurrency-interest