ฉันเพิ่งอัปเดต Android Studio เป็น 3.5 Beta 1 และได้รับ
การหมดอายุ Daemon เนื่องจากพื้นที่ฮีป JVM หมดลง
ข้อความในขณะที่บิลด์กำลังทำงาน นอกจากนี้การสร้างยังใช้เวลาอีกนานกว่าจะเสร็จสมบูรณ์ ใครมีความคิดเกี่ยวกับเรื่องนี้บ้าง?
ฉันเพิ่งอัปเดต Android Studio เป็น 3.5 Beta 1 และได้รับ
การหมดอายุ Daemon เนื่องจากพื้นที่ฮีป JVM หมดลง
ข้อความในขณะที่บิลด์กำลังทำงาน นอกจากนี้การสร้างยังใช้เวลาอีกนานกว่าจะเสร็จสมบูรณ์ ใครมีความคิดเกี่ยวกับเรื่องนี้บ้าง?
คำตอบ:
ฉันสามารถแก้ปัญหานี้สำหรับโครงการReact Nativeของฉันได้โดยกำหนดค่าสิ่งต่อไปนี้:
// 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"
}
}
ซึ่งสามารถแก้ไขได้โดยการเพิ่มขนาดฮีพสูงสุดที่กำหนดค่าไว้สำหรับโปรเจ็กต์
ผ่าน IDE:
เพิ่มบรรทัดด้านล่างลงในไฟล์ gradle.properties ขนาดหน่วยความจำต่ำกว่าสามารถกำหนดค่าได้ตามความพร้อมใช้งานของ RAM
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2560m
ผ่าน GUI:
ในการตั้งค่าค้นหา'การตั้งค่าหน่วยความจำ'และเพิ่มขนาดฮีปสูงสุดของ IDEและขนาดฮีพสูงสุดของ Daemonตามความพร้อมใช้งานของ RAM ของระบบ
วิธีแก้ปัญหาคือการเพิ่มหน่วยความจำบิลด์ Android
เมื่อคุณเพิ่มโมดูลลงในแอปของคุณมีความต้องการที่เหลือเชื่ออยู่ในระบบการสร้าง Android และการตั้งค่าหน่วยความจำเริ่มต้นจะไม่ทำงาน เพื่อหลีกเลี่ยงOutOfMemoryErrorsในระหว่างการสร้าง Android คุณควรยกเลิกการใส่ข้อคิดเห็นการตั้งค่าหน่วยความจำ gradle ทางเลือกที่มีอยู่ใน/android/gradle.properties :
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
คุณสามารถค้นหา gradle.properties ในโฟลเดอร์android
ปล
เรากำลังทำอะไรและทำไมจึงช่วยได้
ให้ฉันล้างคำศัพท์พื้นฐานเพื่อทำความเข้าใจเรื่องทั้งหมด
Daemon : - daemon คือโปรแกรมคอมพิวเตอร์ที่ทำงานเป็นกระบวนการเบื้องหลังแทนที่จะอยู่ภายใต้การควบคุมโดยตรงของผู้ใช้แบบโต้ตอบ
Android Studio 2.1เปิดใช้งานคุณลักษณะใหม่: Dex In Processซึ่งสามารถเพิ่มความเร็วในการสร้างแบบ Clean ทั้งหมดได้อย่างมากรวมทั้งปรับปรุงประสิทธิภาพการทำงานทันที
ในการใช้ประโยชน์จากDex In Processคุณจะต้องแก้ไขไฟล์ gradle.properties ของคุณและเพิ่มจำนวนหน่วยความจำที่จัดสรรให้กับGradle Daemon VMโดย 1 Gb เป็นอย่างน้อย 2 Gb โดยใช้คุณสมบัติ org.gradle.jvmargs :
ระบุอาร์กิวเมนต์ JVM ที่ใช้สำหรับกระบวนการ daemon การตั้งค่านี้มีประโยชน์อย่างยิ่งสำหรับการปรับแต่งการตั้งค่าหน่วยความจำ
org.gradle.jvmargs=-Xmx2048m
ค่าเริ่มต้น:
-Xmx10248m -XX:MaxPermSize=256m
การจัดสรรหน่วยความจำGradle Daemon VMเริ่มต้นคือ 1 กิกะไบต์ซึ่งไม่เพียงพอที่จะรองรับ dexInProcess ดังนั้นในการใช้ประโยชน์คุณจะต้องตั้งค่าเป็นอย่างน้อย 2 กิกะไบต์
Dex ในกระบวนการทำงานโดยอนุญาตให้กระบวนการ DEX หลายกระบวนการทำงานภายใน VM เดียวที่แชร์กับ Gradle ด้วยซึ่งเป็นเหตุผลว่าทำไมคุณต้องจัดสรรหน่วยความจำเพิ่มเติมก่อนจึงจะสามารถเปิดใช้งานได้ - หน่วยความจำนั้นจะถูกแชร์ระหว่าง Gradle และหลายกระบวนการ DEX
หากคุณได้เพิ่ม javaMaxHeapSize ในไฟล์ build.gradle ระดับโมดูลเกินค่าเริ่มต้นที่ 1 กิกะไบต์คุณจะต้องเพิ่มหน่วยความจำที่กำหนดให้กับ Gradle Daemon ให้สอดคล้องกัน
เมื่อมีหน่วยความจำเพียงพอที่กำหนด Dex ในกระบวนการถูกเปิดใช้งานโดยค่าเริ่มต้นการปรับปรุงประสิทธิภาพการสร้างโดยรวมและการลบค่าใช้จ่ายในการเริ่มต้นอินสแตนซ์ VM แบบขนานหลายตัวค่าใช้จ่ายของการเริ่มต้นหลายขนานกรณีผลลัพธ์ที่ได้คือการปรับปรุงอย่างมีนัยสำคัญในเวลาการสร้างทั้งหมดรวมถึงการรันทันทีการเพิ่มหน่วยและการสร้างแบบเต็ม
ที่มา: https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
ใน gradle.properties หากยังใช้งานไม่ได้ขออภัยฉันไม่รู้ว่าจะแก้ไขอย่างไร
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
ในการandroid/gradle.properties
ทำงานเปรียบเสมือนเสน่ห์ ขอบคุณ !! @KailashUniyal