2011年05月17日
Androidのビルド時間でJDKを比較
ccacheを使うことで、Androidの再ビルドの時にCとC++のコンパイル時間は大きく短縮することができました。後はJavaのビルド時間をなんとか縮めたいものです。
そこで今回はUbuntuにするにインストールできる3種類のJDKでAndroidのビルド時間を比較してみました。
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では生成されるコードが少し違うためにビルドできなくなる箇所があるということだそうです。