JVMヒープスペースが使い果たされたためにデーモンが期限切れになる


94

AndroidStudioを3.5Beta 1にアップデートしたところ、

JVMヒープスペースが使い果たされたためにデーモンが期限切れになる

ビルドの実行中にメッセージが表示されます。また、ビルドの完了に時間がかかります。誰かがこれに関して何か考えを持っていますか?


2
それが助け場合は、ここを参照してください:stackoverflow.com/questions/47207126/...
ユライMartinka

1
@JurajMartinkaはい、その通りです。IDEの最大ヒープサイズを増やした後に修正されました。そこで、最新のAndroid Studio3.5メモリ設定と呼ばれる新しいオプションが導入されました。これはすべて、AndroidStudioのメモリリークを修正するために行われます。
RishabhSagar19年

回答:


106

以下を構成することで、ReactNativeプロジェクトでこれを解決することができました。

// gradle.properties
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

そして

// app/build.gradle
android {
    dexOptions {
       javaMaxHeapSize "3g"
    }
}

1
@MattBooth助けてくれて
ありがとう

2
このコードを追加したとき、react-native-vector-iconsが正しく機能していませんでした。
アミールゴルジ

どうもありがとうございました。賛成票は私の感謝の気持ちを表すことはできません。
pokumars

89

これは、プロジェクトに構成されている最大ヒープサイズを増やすことで修正できます。

IDE経由:

以下の行をgradle.propertiesファイルに追加します。以下のメモリサイズは、RAMの可用性に基づいて構成できます

org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2560m

GUI経由:

[設定]で[メモリ設定]を検索し、システムRAMの可用性に応じて、IDEの最大ヒープサイズデーモンの最大ヒープサイズを増やします。

AndroidStudioのメモリ設定


FWIW org.gradle.daemonはデフォルトでtrueに設定されているため、行は必要ありません。
スモールズ

25

解決策は、Androidビルドメモリを増やすことです。

アプリにモジュールを追加すると、Androidビルドシステムに信じられないほどの要求が課せられ、デフォルトのメモリ設定は機能しなくなります。Androidビルド中のOutOfMemoryErrorsを回避するには、/ android /gradle.propertiesにある代替のgradleメモリ設定のコメントを解除する必要があります。

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

gradle.propertiesはandroidフォルダー内にあります。

PS

私たちはこれを何をしていて、なぜそれが役立つのですか?

全体を理解するためのいくつかの基本的な用語を明確にしましょう。

デーモン:-デーモンは、対話型ユーザーの直接の制御下にあるのではなく、バックグラウンドプロセスとして実行されるコンピュータープログラムです。

Android Studio 2.1は、新しい機能であるDex In Processを有効にします。これにより、完全クリーンビルドの速度が劇的に向上し、インスタント実行のパフォーマンスが向上します。

利用するにはデックスでのプロセスは、あなたのgradle.propertiesファイルを変更してに割り当てるメモリの量増やす必要がありますのGradleデーモンVM org.gradle.jvmargsプロパティを使用して、2 GB以上に、1 Gbのでは:

デーモンプロセスに使用されるJVM引数を指定します。この設定は、メモリ設定を微調整する場合に特に便利です。

org.gradle.jvmargs=-Xmx2048m

デフォルト値:

-Xmx10248m -XX:MaxPermSize=256m

デフォルトのGradleデーモンVMメモリ割り当ては1ギガバイトです。これはdexInProcessをサポートするには不十分であるため、これを利用するには、少なくとも2ギガバイトに設定する必要があります。

Dex in processは、Gradleと共有されている単一のVM内で複数のDEXプロセスを実行できるようにすることで機能します。そのため、有効にする前に追加のメモリを割り当てる必要があります。そのメモリはGradleと複数のDEXプロセス間で共有されます。

モジュールレベルのbuild.gradleファイルのjavaMaxHeapSizeをデフォルトの1ギガバイトを超えて増やした場合は、それに応じてGradleデーモンに割り当てられたメモリを増やす必要があります。

十分なメモリが割り当てられている場合、Dex in Processはデフォルトで有効になり、全体的なビルドパフォーマンスが向上し、複数の並列VMインスタンスを起動するオーバーヘッドがなくなります。その結果、インスタント実行、増分ビルド、完全ビルドを含むすべてのビルド時間が大幅に改善されます。

ソース:https//medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e

https://rnfirebase.io/#increasing-android-build-memory


1
これが何をしているのか、なぜそれが役立つのか説明していただけますか?
アレックス

1
ソースも入れてください。medium.com/google-developers/...
Rishabhサーガル

1
こんにちは@KailashUniyalAndroid StudioのGUIでヒープサイズが2048で、「JVMヒープスペースが使い果たされたためにデーモンが期限切れになる」というメッセージが表示される場合はどうなりますか?
アブディ

1
@abdiこれorg.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8をgradle.propertiesに入れてみてください。それでも機能しない場合は、申し訳ありませんが、それを修正する方法がわかりません。
カイラスユニヤル

1
働いたリカの魅力でコメントorg.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8android/gradle.properties外します。ありがとう!@KailashUniyal
vikasbansal20年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.