Still continue Java Performance Tuning-4 also
There are
several ways to make a faster loop. Don’t terminate loop with method calls/
property assessors.
Eliminate
method / property call
Byte x[] =
new byte[loop];
For(int
i=0; i<x.length;i++)
{
for(int j=0;j<x.length;j++)
{
}
} Takes 109ms
byte x[] =
new byte[loop];
int length
= x.length;
for(int
i=0;j<length;i++)
{
for(int j=0; j<length; j++)
{
} Takes 62 ms
}
Eliminate
method / property call
Method /
property call generates some overhead in object oriented paradigm.
Use int to
iterate over loop.
For(int
i=0;i<length;i++)
{
for(int j=0;j<length;j++)
{
}
} Takes 62 ms
for(short
i=0;i<length;i++)
{
for(short j=0;j<length;j++)
{
}
} Takes 125 ms
Vm is optimized to use int for loop iteration
not by byte, short, char use System.arraycopy(…) for copying object
instead of running over loop
System.arrayCopy(..)
For(int
i=0; i<length; i++)
{
x[i]=y[i];
}
Takes
62 ms
System.arraycopy(x,0,y,0,x.length())
Takes 16 ms
System.arraycopy(…) is a native
method, avoids double interpretation and hence performs better Terminate loop
by primitive literal, and not by method call or variable
Terminate
loop by primitive
For(int
i=0;i<countArr.length;i++)
{
for(int j=0;j<countArr.length;j++)
{
}
} Takes 424 ms
for(int
I =countArr.length-1;i>=0;i--)
{
for(int j=countArr.length-1;j>=0lj++)
{
}
} Takes 298 ms
Terminate
loop by primitive
Primitive
comparison is more efficient than function or variable comparison
Use
temporary variables
for(int
i=0; i<limit; i++)
{
ar[0]+=i;
} Takes 459 ms
tmp=0;
for(int
i=0; i<limit; i++)
{
tmp+=i;
}
ar[0]=tmp; Takes
189 ms
Take
code out of loop
Code
that does not need to be executed on every pass
•Assignments
•Accesses
•Tests
•Method
calls
•Method
calls are costlier than the equivalent code without the method call
Put
most common case first
•When several Boolean tests are made
together in one expression in the loop,
•try to phrase the expression such
that it “short circuits” as soon as
possible by putting the most likely case first
Switch vs. if-else
The
average time of switch vs. if-else is about equall in random case
Recursive vs. tail-recursive
Dynamic cached recursive
Post a Comment
Post a Comment