[Home] [By Thread] [By Date] [Recent Entries]

  • From: Elliotte Harold <elharo@m...>
  • To: Rick Marshall <rjm@z...>
  • Date: Fri, 02 Mar 2007 07:34:38 -0500

Rick Marshall wrote:

> The implication is that Java can create a sequence of instructions that 
> C can't.

Essentially it can. Runtime (JIT) optimizers know things static 
optimizers don't. They can sometimes tell that a particular code path 
will not be taken or that an object has a certain type or other useful 
information that is simply not known to the static, compile-time 
optimizer. They can sometimes use such information to run even more quickly.

The nature of the languages also plays a part. Pointer aliasing is a big 
problem for C and C++ optimizers. It's a reason Fortran outperforms C, 
even with the same compiler. Java doesn't have C-style pointers so it's 
more like Fortran in that regard.

And of course manual memory allocation is almost always slower and less 
reliable than a good garbage collection library. You can use a garbage 
collection library for C/C++, but few programmers do in practice.

Together these are enough to push Java a couple of percentage points 
ahead of C on some problems. Not all problems, certainly, but enough of 
them that you can't just naively assert that C must be faster than Java. 
  That may have been true in 1997. Today it demonstrably isn't.


-- 
Elliotte Rusty Harold  elharo@m...
Java I/O 2nd Edition Just Published!
http://www.cafeaulait.org/books/javaio2/
http://www.amazon.com/exec/obidos/ISBN=0596527500/ref=nosim/cafeaulaitA/


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member