Discussions on Java memory model

Jeff Sturm jeff.sturm@appnet.com
Tue Jun 13 11:32:00 GMT 2000

Miles Sabin wrote:
> It's also worth bearing in mind that these aren't just issues
> for SMP machines ... some of the problems show up on 
> uniprocessors too because you don't necessarily have 
> particularly strong guarantees about write ordering.

Yup.  They gave an example: the Symantec JIT for x86 in some cases will
inline the constructor and reorder the writes such that it fails the
double-check idiom, even on a uniprocessor.

Although gcj doesn't inline constructors (yet), the warning still
applies for any shared-memory multiprocessors which are free to reorder
loads/stores (e.g. Alpha, ia64?).

> This is a pretty big deal, because there's a range of 
> concurrent programming idioms (double-check, array copy on 
> write) that simply can't be guaranteed to work in the way you'd 
> expect under the current JMM.

Loosely stated, the rule is "synchronize access to all shared variables
to be safe".  Unfortunately that is both inefficient and non-intuitive.

Getting the semantics tightened for final and volatile will help. 
Currently gcj doesn't appear to generate any special code for either (is
there even such a thing as a RTL pattern for memory barrier?)

Jeff Sturm

More information about the Java mailing list