개발 환경
---------------------------------
OS : Mac
개발 툴 : Android Studio
개발 언어 : Kotlin
targetSdk : 34
minSdk : 24
---------------------------------
오류 내용
java.lang.OutOfMemoryError: Failed to allocate a 64 byte allocation with 122576 free bytes and 119KB until OOM, target footprint 268435456, growth limit 268435456; giving up on allocation because <1% of heap free after GC.
ExoPlayer 에서 영상을 재생하다 급발진으로 앱이 다운되었다.
오류 내용은 간단하다. 메모리가 부족해서 크래시가 발생한거였다.
ExoPlayer와 같은 미디어 플레이어는 대규모 데이터를 처리하기 때문에 메모리 관리가 특히나 중요한데 놓친거였다
오류 내용을 자세히 보면 GC 후 힙이 1% 미만으로 남았다고 한다.
*GC(Garbage Collector) - 앱에서 메모리를 빠르게 할당/해제
인터넷을 돌아다녀 보니 메니페스트 파일에 옵션을 추가하는 것을 가이드 하는 경우가 많다.
아래 옵션을 <application>에 추가하라고 한다.
하지만 아래 옵션 중 hardwareAccelerated는 내가 개발하는 기능에서 사용하기엔 조금 리스크가 있다.
android:hardwareAccelerated="false"
android:largeHeap="true"
먼저 hardwareAccelerated=false를 주면 앱 전체 하드웨어 가속을 비활성화 한다.
비활성화하면 모든 그래픽 연산이 CPU로 처리되어 성능이 저하될 수 있다. 위에서도 언급했듯 나는 Exoplayer로 영상을 재생하는 기능을 사용해야하기 때문에 그래픽 연산을 CPU로 처리하면 영상 재생 성능에 저하가 올 수 있다. (애니메이션도 쓰기 때문에 더 별로임!)
largeHeap=true를 주면 메모리 부족 현상을 완화할 수 있다.
이는 고해상도 이미지 처리, 비디오 스트리밍 등 메모리 집약적인 작업에 유용하다고 한다.
하지만 largeHeap=true를 주기 전 메모리 누수는 없는지 점검도 필수적으로 필요하다.
결론, 메모리 누수를 발생시키는 코드를 점검하고
largeHeap=true <- 이거 하나 줘보자
'개발노트 > Android' 카테고리의 다른 글
[Android] Unresolved reference: Manifest 에러 해결하기 (0) | 2024.04.18 |
---|---|
[Android] Google play store 배포된 apk 키해시 구하기 (0) | 2024.01.09 |
Xcode: 카메라, 갤러리 접근 권한 및 WkWebView 파일 업로드 action sheet 한글화 (1) | 2023.12.05 |
JS <-> Native : Java exception was raised during method invocation 에러 (0) | 2023.11.28 |
[Kotlin] 앱 알림 설정 열기 (1) | 2023.11.22 |
댓글