首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Android Studio Gradle Daemon 內存不足錯誤:根因分析與解決方案

     編輯:Java 相關知識

錯誤現場


Gradle sync failed: Unable to start the daemon process.
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.

根因分析

Gradle Daemon 是長期運行的建構進程,預設最大堆內存由 `org.gradle.jvmargs` 控制。常見配置:


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

問題核心:`-Xmx1024m` 要求 1GB 連續堆內存,但**宿主機物理內存不足**(如 2GB RAM,系統佔用 1GB+,剩餘不足 1GB 連續空間),JVM 無法分配。

解決方案:按機器內存調整

物理內存建議 -Xmx說明
2 GB512m - 768m留 1GB+ 給系統
4 GB1024m - 1536m平衡建構速度與系統穩定
8 GB+2048m - 3072m大型專案多模組並行建構

修改 gradle.properties


# 2GB 內存機器推薦
org.gradle.jvmargs=-Xmx768m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# 移除 MaxPermSize (Java 8+ 已移除 PermGen,改用 Metaspace)

替代:命令行臨時覆蓋


./gradlew --no-daemon assembleDebug  # 禁用 Daemon,每次構建新 JVM(較慢但穩定)
./gradlew -Dorg.gradle.jvmargs="-Xmx512m" assembleDebug

進階優化:Gradle 內存管理最佳實踐

  1. 啟用配置緩存 (Gradle 7+):`org.gradle.configuration-cache=true`,大幅減少配置階段內存
  2. 並行構建:`org.gradle.parallel=true`,但需足夠內存支撐多 Daemon
  3. 避免構建腳本內存洩漏:不在 `build.gradle` 中持有大集合、關閉未用的插件
  4. 升級 Gradle 版本:新版本內存管理更優(Gradle 8+ 基線內存更低)
  5. 使用 JDK 17/21:ZGC/G1GC 更適合大堆、延遲更低

驗證修復


# 1. 清理 Daemon
./gradlew --stop

# 2. 重新同步
./gradlew --refresh-dependencies

# 3. 觀察內存佔用 (可視化工具)
jvisualvm / jconsole / jcmd  VM.native_memory summary

常見誤區

  1. ❌ 以為 `-Xmx` 越大越快 → 超過物理內存導致 Swap/OOM,反而極慢
  2. ❌ 複制網上配置不看機器實際內存
  3. ❌ Java 8 仍設 `MaxPermSize` → 無效參數,啟動警告
  4. ✅ 根據 `free -h` 實際可用內存設定 `-Xmx` 為可用內存 60-70%
  5. ✅ 小內存機器優先用 `--no-daemon` 或縮小堆
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved