> From: Oded Arbel [mailto:[EMAIL PROTECTED] 
> Subject: Re: Java databases as alternative to MySQL on OS X 
> Server? (OT)
> 
> Please read up on your Java memory model. What you describe 
> is a nice abstraction that many Java developers have in their
> mind, but is technically not correct and can't be correct when
> you consider multiple processors, DMA, hyper-threading or even
> just plain old L2 CPU caches.

You have to be careful about what viewpoint you're using.  From a Java
programmer's perspective, as well as actual JVM implementation, what I
said is true (although I left out any discussion of volatility and
visibility of writes in a multi-CPU system).  From a hardware or JIT
implementer perspective, what you said is appropriate, since it applies
primarily to CPU pipelines and other low-level memory writers (not
threads per se), but isn't terribly relevant from a practical Java
programming perspective.  Essentially all high-performance systems have
operated with some variation of these considerations from day one, due
to the potential of asynchronous I/O modifying the instruction stream.
The introduction of write buffers into CPU pipelines twenty-odd years
ago really exacerbated the situation.

> Also please note that JSR-133, once implemented, supposedly makes the 
> whole discussion irrelevant as it forces read/write ordering.

Only for intra-thread actions; for inter-thread, ordering is specified
primarily with regards to entities marked volatile and synchronized
operations.

> But AFAIK, only Sun's JVM 5.0 (1.5) implements it and I'm not sure
about 
> its correctness.

Actually, JSR 133 largely reflects what the 1.4 HotSpot JVM had already
implemented.  As you say, the jury is still out on whether all of the
low-level synch points have been covered.

> You are obviously disregarding the fact that Java is a 
> multi-platform environment, and some platforms (notably 
> the Mac OS-X which started the whole thread) does not 
> provide such a mechanism.

The PowerPC instruction set includes lwarx and stwcx for this purpose.
If the JIT in the OS X JVM does not generate code to use these for
object synchronization, it would be seriously deficient compared to all
other commercial JVMs.  Without generating such code inline, any
multi-threaded interactions are bound to be horribly slow.

> Are you an MS-Windows programmer by any chance ?

Only when I can't avoid it.  Started working on multi-CPU systems in
1969, so I'm quite familiar with synchronization and data visibility
concerns.  35+ years of doing software and hardware design on a variety
of platforms, including several patents for various features of our
systems.  Currently responsible for (among other things) the JVM
implementation on our 36-bit ones-complement mainframes (and yes, our
JVM does pass all the compatibility tests).  So much for disregarding
multi-platform issues.

 - Chuck


THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY
MATERIAL and is thus for use only by the intended recipient. If you
received this in error, please contact the sender and delete the e-mail
and its attachments from all computers.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to