class B extends bench { int get() { return 1;} }
class C extends bench { int get() { return 2;} }
abstract public class bench {
abstract int get();
public static void main(String args[]) {
bench f = new B();
bench f2 = new C();
int sum=0;
for(int i=0;i<2;i++)
{
sum = bench.test(f, f2, Integer.parseInt(args[i]));
}
System.out.println(sum);
}
static int test(bench f1, bench f2, int k)
{
int sum=0;
bench f=f1;
for( int i=0; i<1000000000; i++ )
{
if(i>=k)
{
f=f2;
}
sum+=f.get();
}
return sum;
}
}
ケース1:java bench 1 100000000
ケース2:java bench 100000000 1
ケース1は前回の記事で最適化結果が良い→悪いにパラメータを変更
ケース2はその逆です。
結果
ケース1:3.7s
ケース2:8s
関数単位で最初の呼び出し時にコンパイルされて
ページアウトしない限りは再利用な予感ですね。
都度都度コンパイルであればケース1=ケース2になるはずですが・・
見事に最適化のいいパラメータを最初に渡している方が速い・・
ようやく結論。。
javaとCの比較は・・無理です(笑)
[0回]
PR