ไฟล์ Android JAR ของ Google Studio ทำให้เกิดข้อผิดพลาดเกินขีด จำกัด การโอเวอร์เฮด GC


210

ฉันใช้ Android Studio บน OS X ฉันได้รับข้อความแสดงข้อผิดพลาดนี้:

FAILURE: บิลด์ล้มเหลวโดยมีข้อยกเว้น

  • มีข้อผิดพลาดอะไร: การดำเนินการล้มเหลวสำหรับภารกิจ ': app: preDexDebug' com.android.ide.common.internal.LoggedErrorException: ไม่สามารถเรียกใช้คำสั่ง: / Applications / Android Studio.app/sdk/build-tools/android-4.4W/dx --dex --output / Users / alex / AndroidStudioProjects / SilentSMS / app / build / intermediates / pre-dexed / debug / android-4.3_r2.1-f22bbff4d1017230e169a4844a9c2195f13060d2.jar / ผู้ใช้ /alex/AndroidStudioProjects/SilentSMS / แอพ / สร้าง / ตัวกลาง

    รหัสข้อผิดพลาด: 3 ผลลัพธ์:

  UNEXPECTED TOP-LEVEL ERROR:
  java.lang.OutOfMemoryError: GC overhead limit exceeded
      at com.android.dx.cf.code.RopperMachine.getSources(RopperMachine.java:665)
      at com.android.dx.cf.code.RopperMachine.run(RopperMachine.java:288)
      at com.android.dx.cf.code.Simulator$SimVisitor.visitLocal(Simulator.java:612)
      at com.android.dx.cf.code.BytecodeArray.parseInstruction(BytecodeArray.java:412)
      at com.android.dx.cf.code.Simulator.simulate(Simulator.java:94)
      at com.android.dx.cf.code.Ropper.processBlock(Ropper.java:782)
      at com.android.dx.cf.code.Ropper.doit(Ropper.java:737)
      at com.android.dx.cf.code.Ropper.convert(Ropper.java:346)
      at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:282)
      at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:139)
      at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:94)
      at com.android.dx.command.dexer.Main.processClass(Main.java:682)
      at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
      at com.android.dx.command.dexer.Main.access$600(Main.java:78)
      at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
      at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
      at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
      at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
      at com.android.dx.command.dexer.Main.processOne(Main.java:596)
      at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
      at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
      at com.android.dx.command.dexer.Main.run(Main.java:230)
      at com.android.dx.command.dexer.Main.main(Main.java:199)
      at com.android.dx.command.Main.main(Main.java:103)

ฉันใช้ห้องสมุดนี้:

http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/

ฉันดึงไฟล์ JAR และเพิ่มลงในโครงการของฉัน - โครงการที่ฉันพยายามสร้างคือ:

https://github.com/domi007/silentSMS/

ฉันเข้าใจว่าเป็นเพราะค่า xms และ xmx ของฉันต่ำเกินไป ฉันเพิ่มพวกเขาใน:

/ Applications / Android Studio.app/bin/idea.vmoptions ดังนั้นตอนนี้จึงบอกว่า:

-Xms256m
-Xmx1024m

อย่างไรก็ตามฉันยังคงได้รับข้อผิดพลาด สิ่งนี้อาจเกิดจากอะไร นอกเหนือจากแอพ silentSMS เป็นโครงการ Eclipse และฉันเปลี่ยนรหัสไปยัง Android Studio ฉันไม่ได้เปลี่ยนแปลงอะไรเลย ในแง่ของข้อผิดพลาดที่พบใน Android Studio - มันไม่ได้และทุกอย่างก็ดูดี

คำตอบ:


547

ฉันคิดว่ามีวิธีแยกต่างหากเพื่อเพิ่มขีด จำกัด ฮีปของการดำเนินการ dexing เพิ่มสิ่งนี้androidลงในbuild.gradleไฟล์ที่คุณปิด:

dexOptions {
    javaMaxHeapSize "4g"
}

และดูว่าช่วยได้ไหม

(ได้รับความอนุเคราะห์จากคำตอบนี้จาก Scott Barta )


45
4gค่อนข้าง overkill 2gก็โอเค
Hugo Gresse

3
Fantastic! นอกจากนี้ยังแก้ไขข้อผิดพลาดของฉัน ฉันพบว่ายิ่งให้ความทรงจำมากเท่าไรการสร้างก็จะเร็วขึ้นเท่านั้น ฉันไปจากมากกว่า 1 นาทีถึง 19 วินาที
Simon

2
ฉันยังคงได้รับข้อผิดพลาด: java.lang.OutOfMemoryError: เกินขีด จำกัด ค่าใช้จ่ายของ GC เกิน [org.gradle.api.internal.project.ant.AntLoggingAdapter] ที่ java.util.BitSet.clone
IgorGanapolsky

7
ฉันได้เพิ่มสิ่งนี้ แต่ฉันยังเห็นOutOfMemoryError
ชาด Bingham

8
ไม่ทำงานสำหรับฉันจำเป็นต้องเพิ่มขึ้นใน gradle คุณสมบัติ:org.gradle.jvmargs=-XX:MaxPermSize=1024m -Xms1024m -Xmx4096m -XX:ReservedCodeCacheSize=1024m
hmac

93

ในกรณีของฉันเพื่อเพิ่มขนาดฮีพเป็นแบบนี้:

ใช้ Android Studio 1.1.0

android {
    dexOptions {
        incremental true
        javaMaxHeapSize "2048M"
    }
}

ใส่รหัสข้างต้นในไฟล์Build.gradleของคุณ


4
สิ่งนี้ทำงานเพื่อเอาชนะGC overhead limit exceededหลังจากฉันเปิดใช้ Multidexing ข้อยกเว้นเกิดขึ้นในat com.android.dx.command.dexer.Main.runMultiDex(Main.java:334)
คนอยู่ที่ไหนสักแห่ง

นี้จะไม่ไปได้สวยเป็นความคิดเห็น แต่ข้อผิดพลาด Android สตูดิโอแสดงให้เห็นข้อผิดพลาดที่ไม่คาดคิด `ระดับบนสุด: java.lang.OutOfMemoryError: GC วงเงินค่าใช้จ่าย exceeded` สถานที่ตั้งของข้อยกเว้นที่at com.android.dx.util.FixedSizeList.<init>(FixedSizeList.java:38)และด้านบนของสแต็คเป็นcom.android.dx.command.dexer.Main.runMultiDex(Main.java:334) at com.android.dx.command.dexer.Main.run(Main.java:244) at com.android.dx.command.dexer.Main.main(Main.java:215) at com.android.dx.command.Main.main(Main.java:106)
บางคน

1
แต่ทันทีที่ฉันเพิ่มคุณแนะนำพารามิเตอร์ javaMaxHeapSize และส่วนเพิ่ม Android Studio ก็สามารถสร้างแอพที่มีหลาย dexed
คนอยู่ที่ไหนสักแห่ง

หาก 2gb ไม่เพียงพอสักครู่ฉันจะลอง 4gb ที่แนะนำให้ใช้ Commonware
คนอยู่ที่ไหนสักแห่ง

1
ขอบคุณ สังเกตสิ่งที่เอกสารพูดเกี่ยวกับincremental: สิ่งนี้มีข้อ จำกัด มากมายและอาจไม่ทำงาน ใช้อย่างระมัดระวัง
Ferran Maylinch

41

ปัญหาใหม่นี้เกิดจาก Android เวอร์ชันล่าสุด

ไปที่โฟลเดอร์รูทโปรเจคของคุณเปิดgradle.propertiesและเพิ่มตัวเลือกต่อไปนี้:

org.gradle.daemon=true

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

org.gradle.parallel=true

org.gradle.configureondemand=true

จากนั้นเพิ่มการเปลี่ยนแปลงเหล่านี้ในbuild.gradleไฟล์ของคุณ:

dexOptions {
        incremental = true
        preDexLibraries = false
        javaMaxHeapSize "4g" // 2g should be also OK
}

1
คำเตือน: android.dexOptions.incrementalคุณสมบัติเลิกใช้แล้วและไม่มีผลต่อกระบวนการสร้าง
tir38

นี่เป็นการแก้ไขปัญหาของฉัน แต่ i; ts สร้างไฟล์ชื่อ java_pid1512.hprof ซึ่งมีขนาดใหญ่มาก ฉันเดาตัวเลือก Dfile ของคุณกำลังสร้างหรือไม่ จำเป็นหรือไม่และคุณสามารถแสดงวิธีลบการถ่ายโอนข้อมูลไปยังไฟล์ได้หรือไม่
j2emanue

1
@ j2emanue: ไฟล์นี้สร้างขึ้นเนื่องจากตัวเลือก "HeapDumpOnOutOfMemoryError": docs.oracle.com/cd/E15289_01/doc.40/e15062/…
Mehlyfication

1
อาจจำเป็นต้องอัปเดต: incrementalถูกลบในตอนท้ายของปี 2018
cuasodayleo

ใน AS 3.4 การเปิดใช้งาน "org.gradle.jvmargs = -Xmx2048m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8" ใน gradle.properties แก้ไขปัญหาให้ฉัน
JimmyFlash

4

ฉันปิดใช้งานการเรียกใช้ทันทีโดย:

การตั้งค่าเมนู→ สร้างเรียกใช้ทันที "เปิดใช้งานเรียกใช้ทันทีเพื่อสลับรหัสร้อน"

ฉันเดาว่ามันคือการเรียกใช้ทันทีที่ทำให้การสร้างช้าและสร้างไฟล์ pidXXX.hprof ขนาดใหญ่ซึ่งทำให้ขีด จำกัด ค่าใช้จ่ายของ AndroidStudio gc เกิน

(SDK อุปกรณ์ของฉันคือ 19)


คุณทราบได้อย่างไรว่าการเปิดใช้งานทันทีที่สร้างไฟล์ hprof ขนาดใหญ่เช่นนี้ ฉันสังเกตเห็นสิ่งหนึ่งที่เพิ่งสร้างขึ้นบนเซิร์ฟเวอร์ GitLab ของเรา แต่เราไม่ได้เปิดใช้งานการเรียกใช้ทันที
AdamMc331

4

Android Studio 3.5.3

ค้นหาการตั้งค่าหน่วยความจำ (Cmd + Shift + A บน Mac หรือคลิกที่วิธีใช้และเริ่มพิมพ์ "การตั้งค่าหน่วยความจำ") ภายใต้การตั้งค่า / การตั้งค่าและเพิ่มขนาด IDE Heap และ / หรือขนาด Daemon Heap เพื่อความพึงพอใจของคุณ ป้อนคำอธิบายรูปภาพที่นี่


1
ขอบคุณคุณบันทึกวันของฉัน
Virendra Pal Singh


0

ฉันบังคับให้ปิด Java.exe ทั้งหมดจาก taskmanger รีสตาร์ท Android Studio และทำงานให้ฉัน

ป้อนคำอธิบายรูปภาพที่นี่


0

สำหรับฉันไม่ใช่คำตอบที่ได้ผลฉันเห็นว่าทำงานได้ที่นี่ ฉันเดาว่าการมี CPU ทำงานหนักมากทำให้คอมพิวเตอร์ร้อน หลังจากฉันปิดโปรแกรมที่ใช้ CPU จำนวนมาก (เช่นโครม) และทำให้แล็ปท็อปของฉันเย็นลงปัญหาก็หายไป

สำหรับการอ้างอิง: ฉันมี CPU ใน 96% -97% และการใช้หน่วยความจำมากกว่า 2,000,000K โดยกระบวนการ java.exe (ซึ่งเป็นกระบวนการที่เกี่ยวข้องกับการไล่ระดับสีจริง)


วิธีการแก้ปัญหาของคุณเกี่ยวข้องกับปัญหาเฉพาะที่ถูกวางไว้ที่นี่ได้อย่างไร
kalabalik

ฉันได้รับข้อผิดพลาดเดียวกันที่ระบุไว้ด้านบน: java.lang.OutOfMemoryError: เกินขีด จำกัด ค่าโสหุ้ยเกิน GC โซลูชันที่ฉันเสนอแก้ไขข้อผิดพลาดนี้ให้ฉัน
olNoy

0

ฉันกำลังใช้งานAndroid Studio 3.4และสิ่งเดียวที่ทำงานได้สำหรับฉันคือการลบบรรทัดต่อไปนี้ออกจากbuild.gradleไฟล์ของฉัน:

minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

เพราะAndroid Studio 3.4ใช้R8ในfull modeและไม่เข้ากันได้โดยตรงกับProguard


2
ฉันคิดว่านี่ไม่ใช่วิธีแก้ปัญหาเมื่อคุณต้องปล่อยโครงสร้างที่ยุ่งเหยิง ฉันใช้gradle-5.2.1กับAndroid Studio 3.4และมันใช้งานได้ดีแม้ว่าจะมีการminifyEnabled trueตั้งค่า pro-Guard ในขณะที่gradle-5.1.1ก็มีปัญหาที่คล้ายกัน
Vikas Patidar

ตรงข้ามกับสิ่งที่เราต้องการ -1
จุน

อย่างที่ฉันบอกว่ามันใช้งานได้สำหรับฉันและข้อผิดพลาดได้หายไปและในที่สุดฉันก็สามารถสร้าง apk ไม่มีคำตอบอื่นใดที่ทำงานในโครงการของฉัน
pableiros

อัพเดท gradle เป็น5.2.1 run cammand in / project / android ./gradlew wrapper --gradle-version=5.2.1
Ashok Devatwal

0

ในกรณีของฉันฉันแก้ไขของฉัน gradle.properties:

หมายเหตุ: หากคุณเปิดใช้งาน minifyEnabled true:

ลบบรรทัดนี้:

android.enableR8=true

และเพิ่มบรรทัดนี้ใน ur build.gradle, androidบล็อก:

  dexOptions {
        incremental = true
        preDexLibraries = false
        javaMaxHeapSize "4g" // 2g should be also OK
    }

หวังว่าจะช่วยได้บ้าง :)


0

4g ค่อนข้าง overkill เล็กน้อยหากคุณไม่ต้องการเปลี่ยน buildGradle คุณสามารถใช้ FILE -> แคช / รีสตาร์ทไม่ถูกต้อง

ทำงานได้ดีสำหรับฉัน ...


0

ในบางจุดสำเนาที่ซ้ำกันของapply plugin: 'com.android.application'ได้เพิ่มไปยังการสร้างของฉัน การลบสำเนาที่ซ้ำกันและตรวจสอบให้แน่ใจว่าปลั๊กอินการใช้ของฉันทั้งหมดอยู่ที่ด้านบนเพื่อแก้ไขปัญหาให้ฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.