[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[OT] Java volatile broken? [was Java/J2EE and the future..]



On Wednesday 21 April 2004 2:24 pm, Chris wrote:
[...]
> I was actually thinking about writing a lengthy
> analysis/advocacy essay series regarding areas where Open Source is
> weak today and what can be done to improve the situation.  Java will
> be one of many topics.

Regarding the general topic of Java, this morning I read some interesting 
stuff from Bruce Eckel's keynote at the last Python Conference [1].  
Apparently, there is an issue with the volatile keyword in JDK's prior to 
1.5.

<quote>
The examples he was working on for his Thinking in Java book were working 
(i.e. failing) in a dual processor box but he could not reproduce them on 
a single processor box.  This is bad ...

The cache in a multi processor box is not "flushed" (he thinks synchronised 
is a better term -- invalidation is probably better) - the temptation of 
the cpu to read a local variable is to read it from the cache - the 
hardware has to be aware that it has to fetch the real value from main 
memory - a very difficult thing to get correct.  Discussion of read and 
write memory barriers (also known as a "fence".)  Only now in JDK 1.5 does 
the volatile keyword correctly uses barriers.
</quote>

This is hard to believe, given all the SMP boxes running big Java apps, but 
there ya go.  It would be interesting to get a test case from him, and see 
if it works on free software.  :)

[1] http://www.sauria.com/~twl/conferences/pycon2004/20040326/Bruce Eckel 
Keynote.txt

-- 
Mark Bucciarelli, www.hubcapconsulting.com
  GNU/Linux user #266,902 at http://counter.li.org



Reply to: