月曜日, 21 2 月 2005
| gjc VS jvm |
|
|
GNUのJavaコンパイラ、gcjがどれくらい速いのかちょっと試してみた。
以下のコードをサンプルとして使用。内容は50万個のオブジェクトを生成し、配列に順次入れていくというだけの簡単なもの。オブジェクトの生成コスト知りたかったので。
実行環境: RH Linux 7.3(kernel 2.4.28)
Intel Celeron 1.70GHz 1GB Memory
・jvm (Sun J2SDK1.4.2_06)
・gcj (3.3.2)
ただ現実的には余程簡単なプログラムでない限り無いGCの発生を無くすことはできないし、通常の込み入ったプログラムを使用した場合にも結果は変わってくるので比較結果はこの限りではないと思う。
以下のコードをサンプルとして使用。内容は50万個のオブジェクトを生成し、配列に順次入れていくというだけの簡単なもの。オブジェクトの生成コスト知りたかったので。
public class test{
static final int SIZE=500000;
public static void main(String[] args){
long start=System.currentTimeMillis();
testObj[] list=new testObj[SIZE];
for(int i=0;i<SIZE;i++)
list[i]=new testObj(i);
long end=System.currentTimeMillis();
System.out.println("takes "+(end-start)+" ms");
}
public static class testObj{
private int _i;
public testObj(int i){
this._i=i;
}
}
}
実行環境: RH Linux 7.3(kernel 2.4.28)
Intel Celeron 1.70GHz 1GB Memory
・jvm (Sun J2SDK1.4.2_06)
$ javac test.java $ java -cp . test takes 313 ms
・gcj (3.3.2)
$ gcj --main=test test.java $ gcj --main=test -o test test.java $ ./test takes 160 msこれだけを見るとgcjでコンパイルしたネイティブコードの方が速いように見えるが、jvmの方はヒープの割り当てをデフォルトのままで実行しているのでこれをGCが発生しない量に設定し再度実行してみる。
$ java -Xms200m -Xmx200m -cp . test takes 50 msGCさせななければjvmの方が圧倒的に速いようだ。
ただ現実的には余程簡単なプログラムでない限り無いGCの発生を無くすことはできないし、通常の込み入ったプログラムを使用した場合にも結果は変わってくるので比較結果はこの限りではないと思う。
Posted by at 1:05 午前 in Java/






