torutkのブログ

ソフトウェア・エンジニアのブログ

Java/C++100万行規模ソフトウェアのビルド時間比較

JavaC++のビルド時間を比較してみようと思いました。そこで、規模が大き目で、かつコード量が近いJavaC++で書かれた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がDual Coreなので、Visual C++では並行ビルドが効くのではと期待されます。Visual StudioJava(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で調べた結果