GC 오버 헤드 제한을 유발하는 Android Studio Google JAR 파일이 오류를 초과했습니다.


210

OS X에서 Android Studio를 사용하고 있습니다.이 오류 메시지가 나타납니다.

실패 : 예외로 인해 빌드가 실패했습니다.

  • 잘못된 일 : 태스크 ': 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 / 앱 / 빌드 / 중간체 / 프리 덱스 / 디버그 /android-4.3_r2.1-f22bbff4d1017230e169a4844a9c2195f13060d2.jar /Users/alex/AndroidStudioProjects/SilentSMS/app/libs/android-4.3_r2.1.jar

    오류 코드 : 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로 이식하는 것 외에도 아무것도 변경하지 않았습니다. 안드로이드 스튜디오는 오류를 발견했습니다. 그렇지 않으며 다른 모든 것이 잘 보입니다.

답변:


547

나는 dexing 작업의 힙 한계를 높이는 별도의 방법이 있다고 생각합니다. 파일 의 android클로저에 이것을 추가 build.gradle하십시오 :

dexOptions {
    javaMaxHeapSize "4g"
}

도움이되는지 확인하십시오.

( Scott Barta의 답변에 대한 아이디어 제공 )


45
4g조금 잔인한이며, 2g괜찮
휴고 Gresse

3
환상적인! 이것은 또한 내 오류를 수정했습니다. 나는 더 많은 메모리를 줄수록 더 빨리 빌드된다는 것을 알았습니다. 나는 1 분 이상에서 19 초로 갔다.
시몬

2
여전히 오류가 발생합니다. java.lang.OutOfMemoryError : java.util.BitSet.clone에서 GC 오버 헤드 한계가 [org.gradle.api.internal.project.ant.AntLoggingAdapter]를 초과했습니다
IgorGanapolsky

7
나는 이것을 추가했지만 여전히 보인다OutOfMemoryError
Chad Bingham

8
나를 위해 작동하지 않았고 gradle.properties에서 위로 올라와야했습니다.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 exceededMultidexing을 활성화 한 후에 극복하기 위해 노력했습니다 . 예외는at com.android.dx.command.dexer.Main.runMultiDex(Main.java:334)
누군가 어딘가에

이 주석으로 꽤 될 수 없습니다 만, 안드로이드 스튜디오 오류가`보여 예상치 못한 TOP-LEVEL 오류 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는 멀티 덱싱 된 앱을 만들 수있었습니다.
누군가 어딘가에

2gb로 충분하지 않으면 commonware가 제안한 4gb를 시도합니다.
누군가 어딘가에

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
업데이트가 필요할 수 있음 : incremental2018 년 말에 삭제
cuasodayleo

3.4 AS 가능에서 "org.gradle.jvmargs = -Xmx2048m -XX :를 MaxPermSize = 512m -XX + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8"를 gradle.properties 파일에 나를 위해 문제 해결
JimmyFlash

4

다음으로 인스턴트 실행을 비활성화합니다.

메뉴 환경 설정빌드즉시 실행 "핫 스왑 코드로 즉시 실행 사용"

빌드를 느리게 만들고 AndroidStudio gc 오버 헤드 한계를 초과하는 큰 크기의 pidXXX.hprof 파일을 만드는 것은 Instant Run이라고 생각합니다.

(내 장치 SDK는 19입니다.)


대용량 hprof 파일을 생성 한 것이 Instant Run이라는 것을 어떻게 알았습니까? 최근 GitLab 서버에서 생성 된 것을 보았지만 즉시 실행이 가능하지 않습니다.
AdamMc331

4

안드로이드 스튜디오 3.5.3

환경 설정 / 설정에서 메모리 설정 (Mac의 경우 Cmd + Shift + A 또는 도움말을 클릭하고 "메모리 설정"입력을 시작)을 찾고 IDE 힙 크기 및 / 또는 데몬 힙 크기를 만족스럽게 늘리십시오. 여기에 이미지 설명을 입력하십시오


1
고마워 내 하루를 구했어
Virendra Pal Singh

1

이것을 build.gradle 파일에 추가하십시오

dexOptions {
   javaMaxHeapSize "2g"
}

0

나는 taskmanger에서 모든 Java.exe를 강제로 닫고 Android Studio를 다시 시작했으며 나를 위해 일했다

여기에 이미지 설명을 입력하십시오


0

나를 위해 여기에 효과가 없었습니다. CPU가 극도로 열심히 작동하면 컴퓨터가 뜨거워지는 것 같습니다. 크롬과 같은 많은 양의 CPU를 소비하는 프로그램을 닫고 랩톱을 식힌 후에 문제가 사라졌습니다.

참고로 : 나는 java.exe 프로세스 (실제로 gradle 관련 프로세스)에 의해 96 % -97 %의 CPU와 2,000,000K 이상의 메모리 사용을했습니다.


귀하의 솔루션은 여기에 제기 된 특정 문제와 어떤 관련이 있습니까?
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사용 중이며 직접 호환되지 않기 때문에R8full modeProguard


2
난독 화 된 빌드를 출시해야 할 때 이것이 해결책이 아니라고 생각합니다. Android Studio 3.4에서 gradle-5.2.1 을 사용 했으며 gradle-5.1.1 과 비슷한 문제가있는 동안 프로 가드 구성 에서도 잘 작동합니다 . minifyEnabled true
Vikas Patidar

이것은 우리가 원하는 것과 정반대입니다. -1
Zun

내가 말했듯이, 이것은 나를 위해 일했고 오류는 사라졌고 마침내 APK를 생성 할 수있었습니다. 다른 답변은 내 프로젝트에서 효과가 없었습니다.
pableiros

업데이트 Gradle을에 5.2.1 실행 cammand에서 / 프로젝트 / 안드로이드 ./gradlew wrapper --gradle-version=5.2.1
쇼크 Devatwal

0

내 경우에는 내 편집 gradle.properties:

참고 : u를 활성화하면 minifyEnabled true:

이 줄을 제거하십시오 :

android.enableR8=true

통해 UR이 줄을 추가 build.gradle, android블록 :

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

이것이 도움이되기를 바랍니다 :)


0

4G는 약간 과잉입니다. buildGradle을 변경하지 않으려면 FILE-> Invalid caches / restart를 사용할 수 있습니다.

그게 잘 작동합니다 ...


0

어느 시점에서 복제 사본이 apply plugin: 'com.android.application'빌드 gradle에 추가되었습니다. 복제본을 제거하고 모든 적용 플러그인이 맨 위에 있는지 확인하면 문제가 해결되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.