Hello Osvaldo,

I've prepared simple test which scans an array and does assignments for each 
element,
see attached Test class:

a[k] = a[less];
a[less++] = 0; // or a[less] = 0; less++;

The result of running "java -client Test" is:

a[less], less++;   Time: 6998
a[less++];         Time: 8416

It is much more than 1%. Is it bug in JVM? Note that under server VM
there is no difference between "a[less++]" and "a[less], less++".
I'm using JDK 7 on Windows XP:

java version "1.7.0-ea"
Java(TM) SE Runtime Environment (build 1.7.0-ea-b84)
Java HotSpot(TM) Client VM (build 17.0-b09, mixed mode, sharing)

Thanks,
Vladimir

Fri, 18 Jun 2010 13:03:50 -0300 письмо от Osvaldo Doederlein 
<opin...@gmail.com>:

> Hi,
> 
> 2010/6/18 Vladimir Iaroslavski <iaroslav...@mail.ru>
> Hello,
> 
> Here is next piece of improvements, see attached class.
> It is surprise but code
> 
> a[less++] = ak;
> 
> works slower (client VM) than
> 
> a[less] = ak;
> less++;
> 
> This is really surprising, even if it's C1 only - and bad, considering that 
> "p[i++] = y" is a very popular Java idiom for sequential mutation of arrays 
> (the equivalent of C's "*p++ = y". I wonder if this reveals some simple 
> bug/weakness of C1 that should be investigated. Even a un-mighty, client-side 
> JIT should have no problem with such minor code-ordering issue. I'm all in 
> favor of micro optimization for critical stuff like DPQS (or most of the core 
> actually), but the kind of change above borders gratuitous code churn... 
> perhaps if the problem is simple to fix at the VM level, we gain this extra 
> 1% not only in DPQS but in a gazillion other methods.
> 
> A+
> Osvaldo
> 
> In general, we save about about 1% on Bentley's test suite.
> Also I eliminate additional check of indexes k and less:
> 
> if (k != less) {
>   // swap a[k] and a[less]
> }
> For long type it gives additional one percent and works the same
> for other types.
> 
> If you don't have any comments/suggestions, I'm going to integrate
> the code into JDK repository on the next week.
> 
> Thanks,
> Vladimir

Attachment: Test.java
Description: Binary data

Reply via email to