LoginSignup
5
2

More than 5 years have passed since last update.

Android開発中にGC overhead limit exceededで逝く

Last updated at Posted at 2017-07-28

兆候

今日はいつになくAndroid Studioの挙動が重かった。
前の仕事でもビルドが重いことがあった。
ビルドに3分4分かかることなんてザラで、ビルドするデーモンプロセスを常駐化させたりとチューニングしても効果が薄かった。

でも今日は違った。

大したコード量も書いてないし、確かにDataBinding使ったり、DIツール導入したりしたけど、そんなビルドで重くなるような要素にはならないなと。

それでも、ビルドするのに12分かかった。
どんどん重くなっていった。
そしてビルドエラーにたどり着いた。

GC overhead limit exceeded

またポエム書いちゃった。

単刀直入に言えば、
transformJackWithjackfordebug というタスクでビルドエラー吐く。
そのあとに続くメッセージが
GC overhead limit exceeded だった。

詳しく分析してないけど、gradleのスクリプト走らせる時のJVMのヒープサイズが小さいとよく起こる問題らしい。
jackコンパイラがヒープめっちゃ使うのかも。

なお

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8 
    }
}

を指定している前提でした。

解決方法

android {
    dexOptions {
         javaMaxHeapSize "2g"
    }
}

これ指定するだけで、ビルドからエミュレータまでの転送時間が2、3秒になった。
うそでしょ

追記

Androidアプリのビルドを高速化するDex In Processが有効になる条件
この記事によると、 gradle.properties
org.gradle.jvmargs の値を javaMaxHeapSize を超えてないとダメみたい。

こういう関係性
javaMaxHeapSize < org.gradle.jvmargs

追伸

同じエラーで、これで解決しなかったらごめんなさいm(_ _)m

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2