2011年05月17日

Androidのビルド時間でJDKを比較

ccacheを使うことで、Androidの再ビルドの時にCとC++のコンパイル時間は大きく短縮することができました。後はJavaのビルド時間をなんとか縮めたいものです。

そこで今回はUbuntuにするにインストールできる3種類のJDKでAndroidのビルド時間を比較してみました。

(English version of this page)



3つのJDK

以下の3つのJDKで試しました。

  • Ubuntuのapt-getで得られたsun-jdk
  • OracleのサイトからダウンロードしたJDK
  • openjdk

Ubuntuのapt-getで得られたsun-jdk

本家のサイトに書いてある方法(http://source.android.com/source/initializing.html)でインストールできます。

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk

javaのversionは"1.6.0_24"でした。

OracleのサイトからダウンロードしたJDK

Oracleのダウンロードサイトからjdk-6u25-linux-x64.binを入手します。このファイルはshell scriptになっています。

$ cd /usr/lib/jvm
$ sudo sh ~/jdk-6u25-linux-x64.bin

javaのversionは"1.6.0_25"でした。

openjdk

これは簡単にインストールできます。

$ sudo apt-get install openjdk-6-jdk

javaのversionは"1.6.0_20"でした。

ビルドの時間を比較

USE_CCACHE=1にしています。ビルド環境の詳細は前回の記事を見てください。

使用するJDKの切り替えは以下のスクリプトを使って環境変数を変更することによって行っています。

$ cat ./env.sh 
#export ANDROID_JAVA_HOME=/usr/lib/jvm/java-6-openjdk
export ANDROID_JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.24
#export ANDROID_JAVA_HOME=/usr/lib/jvm/jdk1.6.0_25
export JAVA_HOME=$ANDROID_JAVA_HOME
export PATH=$JAVA_HOME/bin:$PATH

ビルドマシンは Ubuntu 10.04 CPU: Intel Core i7 950 @3.07GHz, メモリ12GB

Ubuntuのapt-getで得られたsun-jdk

$ java -version
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)
$ rm -rf out/
$ ./build.sh 

real	8m12.327s
user	64m53.990s
sys	4m5.490s

OracleのサイトからダウンロードしたJDK

$ java -version
java version "1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.0-b11, mixed mode)
$ rm -rf out/
$ ./build.sh 

real	8m21.206s
user	67m55.350s
sys	4m6.490s

openjdk

$ java -version
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.7) (6b20-1.9.7-0ubuntu1~10.04.1)
OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode)
$ rm -rf out/
$ ./build.sh 

real	8m3.132s
user	63m13.720s
sys	4m7.530s

結論

何度か測定を繰り替えしましたが、傾向は同じでopenjdkがわずかの差で速いということがわかりました。

CPUやメモリ搭載量などによって結果は変わるかもしれません。ぜひ比べてみてください。

個人的にはインストールが簡単で、速いopenjdkを気に入っています。

追記 2011.5.17

Javaの切り替えを行うのに以下のコマンドも使うことができます。

$ sudo update-alternatives --config java

これはシステム全体のjavaを切り替えます。

私は記事中で紹介したように環境変数の切り替えの方を好みます。なぜなら、Gingerbread(JDK6が必要)とFroyo(JDK5が必要)を並列してビルドしたりすることもあるからです。

追記 2011.5.18

この記事を英語にしてGoogle GroupsのAndroid Buildingに投稿したところ、AOSPのメンテナであるJBQさんからコメントがつきました。

以前からOpenJDKへの切り替えは検討していたそうです。

まだそうしていない理由は、MacOSのOpenJDKのライセンスがややこしいということと、JDKとOpenJDKでは生成されるコードが少し違うためにビルドできなくなる箇所があるということだそうです。



トラックバックURL

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード