>source

많은 라이브러리와 클래스를 가지고 있기 때문에 많은 응용 프로그램을 혼자 남겨두고 포기했기 때문에 결국이 메모리 오류가 발생했습니다. 최근에 JProfiler를 사용하기 시작했습니다. 그러나 여전히 앱이 조금 커져서 다시 발생하지 않도록 도움이되지 않았습니다. 내 설정 확인 :

gradle.properties의

org.gradle.jvmargs=-Xmx16g -XX:MaxPermSize=16g -XX:+HeapDumpOnOutOfMemoryError
GRADLE_OPTS=-Xmx16g

그라들 (앱)

dexOptions { javaMaxHeapSize "16g" }

이 값들은 1G 또는 100G로 차이가 나지 않습니다. 그는 중요하지 않습니다 .JProfiler에서 커밋 된 크기는 230MB입니다. 앱을 실행하기 전에 80MB가 이미 사용되었습니다! 사진을 확인하십시오 :

유휴 :

메모리 오류 :

이 커밋 된 크기는 메모리 부족 오류가 발생하는 위치입니다. 당신이 그림에서 볼 수 있듯이. 이것은 실행 버튼을 누르고 실행하면 메모리 오류가 발생하지 않지만 JProfiler의 평균 시간에 사용 된 크기가 커밋 된 크기에 가까워지고 충분히 가까워지면 오류가 발생합니다. 이 커밋 된 크기를 늘리는 방법 내 장치에 현재 1.55GB 정도의 메모리가 남아있는 것은 아닙니다. 그럼 뭐야? 안녕하세요 세계 응용 프로그램을 만들지 않아야합니다. 나는 완전히 깨끗한 코드를 작성 했으며이 응용 프로그램이 완벽하게 작동하지 않았으며 아무것도 느리지 않습니다. 그러나 아직 라이브러리를 사용하지 않는 라이브러리를 더 추가하면! 메모리 오류가 발생합니다. 힙 워커는 다음과 같습니다.

나에게 평범한 것처럼 보입니다 .char와 String이 내가하는 일의 최상위에 있습니까? 제발 도와주세요. 감사합니다!


  • 답변 # 1

    gradle 사양에 대해서는 모르겠지만 MaxHeapSize 설정을위한 표준 스위치   -Xmx 입니다 ;-Xmx 및 -Xms로 gradlew를 통해 응용 프로그램을 실행하십시오.

    앱을 빌드하는 것에 대해 이야기하고 있다면 ( "빌드"와 반대) 최종 JAR을 먼저 빌드하고 독립 실행 형 애플리케이션으로 ( java -Xmx... -jar 를 통해) 실행할 수 있습니다. ).

    특정 OOM 오류가 있습니까?

    Btw. -XX:MaxPermSize 를 기반으로  당신은 당신이 정말로 오래된 Java 8 이전 버전을 사용하고있는 것 같습니다 (또는 JVM 인수를 올바르게 설정하지 않았습니다). 업그레이드를 고려해야합니다.

  • 이전 ios - 첫 번째 요소의 너비를 갖도록 나머지 StackView를 만들고 나머지를 채우는 방법
  • 다음 android - 둥근 모서리와 투명한 배경의 대화 상자 내에서 recyclerview에서 항목 장식을 사용하는 방법