[vox-tech] benchmarking (again)

Peter Jay Salzman p at dirac.org
Fri Feb 17 13:16:29 PST 2006


On Fri 17 Feb 06, 12:00 PM, Mark K. Kim <lugod at cbreak.org> said:
> On Fri, Feb 17, 2006 at 11:13:42AM -0500, Peter Jay Salzman wrote:
> 
> > And I've read that java allocates
> > memory for all data items on the heap, which is never stored in L1 cache
> > while for C and C++, temporary objects are often put into the L1 cache.
> 
> I think you mean CPU registers?  L1/L2/L3 caches are just buffers
> between RAM and the CPU registers, and all data allocated in RAM, stack
> or heap, go through L1 cache at some point.  Programming languages or
> compilers have no direct memory allocation access of the caches.
 
I was under the impression that this is what computer scientists call
"locality of data" -- if data is used once, it'll be used again soon.  The
strategy that attempts to exploit locality of data is to hold recent data in
L1 cache.

I read that in an article on Java World on optimizing Java programs.

> Anyway, wouldn't the details of data items getting allocated in the
> heap/stack/register depend on the JVM and the JIT compiler?  Objects,
> would have to be allocated in the heap, but simple data types like
> "double" can certainly be temporarily allocated in a CPU register until
> it's out of scope, no matter what the Java standard may say, if the JIT
> compiler, for example, determines it can be done safely and can speed up
> the execution.

I see what you mean.  Yeah, but the question still remains -- what's going
on with the user time in java apps, and why does the program run faster in
Java than C++?  Certainly C++ compilers know how to do all that stuff too.

Pete


More information about the vox-tech mailing list