JavaとC++のビルド時間を比較してみようと思いました。そこで、規模が大き目で、かつコード量が近いJavaとC++で書かれた2つのソフトウェアを選び、これらをビルドするのにかかる時間で比較してみました。
C++はコンパイルに時間がかかるのは予想していましたが、Javaの同規模のコードはどれだけかかるか検討がつきませんでした。
結果は、「圧倒的ではないか、Javaは!」
比較対象のソフトウェア
C++は、オープンソースのCORBA御三家筆頭格(注:Googleヒット件数調べ)のTAOを取り上げます。
Javaは、オープンソースのJ2EEアプリケーションサーバ筆頭格のJBoss Application Serverを取り上げます。
両者の規模は、以下のようになります*1。
プロダクト名 | 総行数 | 命令行数 | ファイル数 | クラス数 |
---|---|---|---|---|
ACE+TAO 5.6.1 | 1,066,708 | 247,391 | 2592 | 4548 |
JBoss AS 4.2.2GA | 706,676 | 252,190 | 4032 | 5218 |
総行数では40%ほどC++(ACE+TAO)の方が大きいものの、命令行数はほぼ同一、クラス数はJBossの方が多いので、おおよそ同等とみなしていいでしょう。
ビルド環境
使用したPCのスペックは以下のとおりです。
- CPU: AMD Athlon 64 X2 4200+ (Dual Core 2.2GHz)
- OS : Windows Vista 64bit
- Memory: 2GB
- HDD : SATA 250GB 1.5G bit/秒
使用したコンパイラ・ビルドツールは以下のとおりです。
CPUがDual Coreなので、Visual C++では並行ビルドが効くのではと期待されます。Visual StudioのJava(Ant)の場合は、並行ビルドはしてくれないように思います。この点で少しVC++有利かもしれません。
ビルド時間結果
プロダクト名 | ビルド時間 |
---|---|
ACE+TAO 5.6.1 | 2時間35分30秒 |
JBoss AS 4.2.2GA | 3分13秒 |
あまりに差が大きいので、ビルド中間物の数を調べてみました。
C++の場合、*.objファイルが、Javaの場合は*.classファイルがコンパイルによって出力されます。
プロダクト名 | ビルド生成ファイル数 |
---|---|
ACE + TAO 5.6.1 | 4174ファイル (*.obj) |
JBoss AS 4.2.2GA | 5375ファイル (*.class) |
C++の場合、ReleaseビルドとDebugビルドで2回分生成されています。ビルド時間を半分にするべきという意見もありますが、開発作業においては、DebugおよびReleaseの両方を使用するので、開発作業の効率を考える上ではC++の場合は両方を生成する時間とするのが妥当と考えます。
*1:無償のソフトウェア・メトリクス計測ツールSourceMonitorで調べた結果