Tệp Google JAR của Android Studio gây ra lỗi vượt quá giới hạn GC


210

Tôi đang sử dụng Android Studio trên OS X. Tôi nhận được thông báo lỗi này:

FAILURE: Build thất bại với một ngoại lệ.

  • Điều gì đã sai: Thực thi không thành công cho nhiệm vụ ': app: preDexDebug'. com.android.ide.common.iternal.LoggedErrorException: Không thể chạy lệnh: / Ứng dụng / Android Studio.app/sdk/build-tools/android-4.4W/dx --dex --output / Users / alex / AndroidStudioProjects / SilentSMS / app / build / trung gian / pre-dexed / debug / android-4.3_r2.1-f22bbff4d1017230e169a4844a9c2195f13060d2.jar /Users/alex/AndroidStudioProjects/Sil

    Mã lỗi: 3 Đầu ra:

  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)

Tôi đang sử dụng thư viện này:

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

Tôi đã kéo tệp JAR và thêm nó vào dự án của mình - dự án tôi đang cố gắng xây dựng là:

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

Tôi hiểu điều đó là do giá trị xms và xmx của tôi quá thấp. Tôi đã tăng chúng trong:

/ Ứng dụng / Android Studio.app/bin/idea.vmoptions để bây giờ nó nói:

-Xms256m
-Xmx1024m

Tuy nhiên, tôi vẫn nhận được lỗi. Điều này có thể được gây ra bởi những gì? Ngoài ứng dụng thầm lặng là một dự án Eclipse và tôi chuyển mã qua Android Studio, tôi không thay đổi gì cả. Về các lỗi phát hiện của Android Studio - không, và mọi thứ khác đều ổn.

Câu trả lời:


547

Tôi nghĩ rằng có một cách riêng để tăng giới hạn heap của hoạt động dexing. Thêm phần này vào phần androidđóng của bạn trong build.gradletệp của bạn :

dexOptions {
    javaMaxHeapSize "4g"
}

và xem nếu điều đó giúp.

(ý tưởng lịch sự của câu trả lời này từ Scott Barta )


45
4glà một chút quá mức, 2glà ok
Hugo Gresse

3
Tuyệt diệu! Điều này cũng đã sửa lỗi của tôi. Tôi thấy rằng tôi càng cho nó nhiều bộ nhớ thì tốc độ xây dựng càng nhanh. Tôi đã đi từ hơn 1 phút đến 19 giây.
Simon

2
Tôi vẫn nhận được lỗi: java.lang.OutOfMemoryError: vượt quá giới hạn chi phí của GC [org.gradle.api.i INTERNal.project.ant.AntLoggingAd CHƯƠNG] tại java.util.BitSet.clone
IgorGanapolsky 17/8/2016

7
Tôi đã thêm cái này, nhưng tôi vẫn thấyOutOfMemoryError
Chad Bingham

7
không làm việc cho tôi, cần phải tăng lên gradle.property:org.gradle.jvmargs=-XX:MaxPermSize=1024m -Xms1024m -Xmx4096m -XX:ReservedCodeCacheSize=1024m
hmac

93

Trong trường hợp của tôi, để tăng kích thước heap trông như thế này:

Sử dụng Android Studio 1.1.0

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

Đặt mã trên vào tệp Build.gradle của bạn .


4
điều này đã khắc phục được GC overhead limit exceededsau khi tôi kích hoạt Multidexing. Ngoại lệ là trongat com.android.dx.command.dexer.Main.runMultiDex(Main.java:334)
Ai đó ở đâu đó

này sẽ không được khá như một bình luận, nhưng lỗi Android Studio cho thấy 'UNEXPECTED TOP CẤP LỖI: java.lang.OutOfMemoryError: GC hạn overhead exceeded` Vị trí của ngoại lệ là tại at com.android.dx.util.FixedSizeList.<init>(FixedSizeList.java:38)và đỉnh ngăn xếp đượccom.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)
Có người Một nơi nào đó

1
Nhưng ngay sau khi tôi thêm bạn đã đề xuất javaMaxHeapSize và các tham số gia tăng, Android Studio đã có thể xây dựng ứng dụng đa điểm.
Ai đó ở đâu đó

Nếu 2gb không đủ một số điểm, thì tôi sẽ thử 4gb mà phần mềm phổ biến đề xuất.
Ai đó ở đâu đó

1
Cảm ơn. Lưu ý những gì các tài liệu nói về incremental: Điều này có nhiều hạn chế và có thể không hoạt động. Sử dụng cẩn thận.
Ferran Maylinch

41

Vấn đề mới này là do phiên bản mới nhất của Android.

Chuyển đến thư mục gốc dự án của bạn, mở gradle.propertiesvà thêm các tùy chọn sau:

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

Sau đó thêm những thay đổi trong build.gradletệp của bạn :

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

1
Cảnh báo: Tài android.dexOptions.incrementalsản không được dùng nữa và nó không ảnh hưởng đến quá trình xây dựng.
tir38

Điều này đã giải quyết vấn đề của tôi. nhưng tôi đang tạo một tệp có tên java_pid1512.hprof rất lớn. tôi đoán tùy chọn Dfile của bạn đang tạo ra nó? có cần thiết không và bạn có thể chỉ ra cách loại bỏ kết xuất vào tệp không
j2emanue

1
@ j2emanue: Tập tin này được tạo vì tùy chọn "HeapDumpOnOutOfMemoryError": docs.oracle.com/cd/E15289_01/doc.40/e15062/ tựa
Mehlyfication

1
Có thể cần cập nhật: incrementalbị xóa vào cuối năm 2018
cuasodayleo

trong AS 3.4 cho phép "org.gradle.jvmargs = -Xmx2048m -XX: MaxPermSize = 512M -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8" trong tập tin gradle.properties giải quyết được vấn đề đối với tôi
JimmyFlash

4

Tôi tắt tính năng Instant Run của mình bằng cách:

Tùy chọn menu → Xây dựngChạy ngay lập tức "Bật chạy ngay lập tức để mã trao đổi nóng"

Tôi đoán rằng đó là Instant Run làm cho quá trình xây dựng bị chậm và tạo tệp pidXX.hprof kích thước lớn khiến giới hạn trên không của AndroidStudio gc vượt quá giới hạn.

(SDK thiết bị của tôi là 19.)


Làm thế nào bạn phát hiện ra rằng Instant Run đã tạo ra một tệp hprof lớn như vậy? Tôi nhận thấy một cái được tạo gần đây trên máy chủ GitLab của chúng tôi, nhưng chúng tôi không kích hoạt chạy ngay lập tức.
AdamMc331

4

Studio Android 3.5.3

Tìm Cài đặt bộ nhớ (Cmd + Shift + A trên máy Mac hoặc nhấp vào Trợ giúp và bắt đầu nhập "Cài đặt bộ nhớ") trong Tùy chọn / Cài đặt và tăng Kích thước vùng heap IDE và / hoặc Kích thước heap Daemon để bạn hài lòng nhập mô tả hình ảnh ở đây


1
Cảm ơn bạn đã cứu ngày của tôi.
Virendra Pal Singh

1

Thêm phần này vào tập tin build.gradle

dexOptions {
   javaMaxHeapSize "2g"
}

0

Tôi đã buộc đóng tất cả Java.exe từ taskmanger, khởi động lại Android Studio và nó hoạt động với tôi

nhập mô tả hình ảnh ở đây


0

Đối với tôi không phải là câu trả lời làm việc tôi thấy ở đây làm việc. Tôi đoán rằng việc CPU hoạt động cực kỳ khó khăn sẽ khiến máy tính nóng lên. Sau khi tôi đóng các chương trình tiêu thụ một lượng lớn CPU (như chrome) và làm mát máy tính xách tay của tôi, vấn đề đã biến mất.

Để tham khảo: Tôi có CPU với 96% -97% và việc sử dụng Bộ nhớ trên 2.000.000K theo quy trình java.exe (đây thực sự là quá trình liên quan đến cấp độ).


Làm thế nào để giải pháp của bạn liên quan đến vấn đề CỤ THỂ đặt ra ở đây?
kalabalik

Tôi nhận được cùng một lỗi được chỉ định ở trên: java.lang.OutOfMemoryError: vượt quá giới hạn chi phí của GC Giải pháp tôi đưa ra đã giải quyết lỗi này cho tôi
olNoy

0

Tôi đang sử dụng Android Studio 3.4điều duy nhất hiệu quả với tôi là xóa các dòng sau khỏi build.gradletệp của tôi :

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

Bởi vì Android Studio 3.4là sử dụng R8trong full modevà không tương thích với trực tiếpProguard


2
Tôi nghĩ rằng đây không phải là một giải pháp khi bạn phải phát hành một bản dựng bị che khuất. Tôi đã sử dụng gradle-5.2.1 với Android Studio 3.4 và nó hoạt động tốt ngay cả với minifyEnabled truecấu hình pro-Guard trong khi gradle-5.1.1 gặp vấn đề tương tự.
Vikas Patidar

Điều này hoàn toàn ngược lại với những gì chúng ta muốn. -1
Zun

Như tôi đã nói, điều này làm việc cho tôi và lỗi đã biến mất và cuối cùng tôi đã có thể tạo apk. Không ai trong số những câu trả lời khác làm việc trong dự án của tôi.
pableiros

cập nhật lớp lên 5.2.1 chạy camgers trong / dự án / android ./gradlew wrapper --gradle-version=5.2.1
Ashok Devatwal

0

trong trường hợp của tôi, tôi chỉnh sửa gradle.properties:

lưu ý: nếu bạn kích hoạt minifyEnabled true:

xóa dòng này:

android.enableR8=true

và thêm dòng này trong ur build.gradle, androidblock:

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

hy vọng điều này sẽ giúp một số người :)


0

4g là hơi quá mức, nếu bạn không muốn thay đổi buildGradle, bạn có thể sử dụng TẬP_TIN -> Bộ nhớ cache / khởi động lại không hợp lệ.

Đó là công việc tốt cho tôi ...


0

Tại một số điểm, một bản sao trùng lặp apply plugin: 'com.android.application'đã được thêm vào lớp xây dựng của tôi. Xóa bản sao trùng lặp và đảm bảo tất cả các plugin áp dụng của tôi ở trên cùng đã khắc phục sự cố cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.