1. OOM Killer 란?
Out of Memory Killer 의 약자로 메모리가 부족할 경우, 특정 프로세스를 강제 종료시킨다. 즉, OOM 이 발생하지 않도록 적은 프로세스를 죽여 많은 메모리를 확보하는 heuristic 에 기반한다. 그리고 OOM 상황이 발생하지 않도록 노력하는 것이 중요하여 안드로이드에서는 별도의 LMK 를 사용하고 있다.
2. OOM 발생원인은?
커널은 가상 메모리를 이용한 메모리를 할당하므로 실제 가용한 물리적 메모리보다 큰 프로그램 메모리를 할당할 수 있다.
즉, 프로그램에서 당장 사용하지 않는 메모리는 나중에 할당하기 때문에 실제로 사용 가능한 메모리를 초과한 프로세스가 load 될 수 있게 된다.
이것이 overcommit 이라 부르는데, 메모리가 실제로 쓰여지게될 경우 실제 메모리가 부족하게 되므로 OOM 이 발생하게 된다.
안드로이드에서는 OOM 이 발생하는 가장 많은 경우는 비트맵 로딩 때문이다.
안드로이드 3.0 이하에서 비트맵의 메모리가 달빅 VM에 할당되지 않고, Native Heap 영역은 GC 수행영역 밖이기 때문에 메모리 소멸 시점이 다르다.
3. LMK에 대해 설명하시오.
Low Memory Killer 의 약자로 구글직원이 2009년에 안드로이드 메모리 관리를 위해 작성한 리눅스 커널 모듈이다.
LMK 는 가용 메모리를 확보하는 것이다.
가용 메모리 (available memory) 가 부족할 때, PC 나 휴대폰 등과 같은 시스템들의 성능이 크게 떨어진다.
또한, OOM 은 주요한 애플리케이션을 죽이지 않는다는 보장을 할수가 없다. 따라서 안드로이드에 맞지 않다.
이런 문제를 방지하기 위해 사용하지 않는 프로세스들을 지워야한다.
💡지우는 방법은? process 에게 adj 값을 부여하여, 메모리가 minfree 이하로 떨어질 경우 높은 adj 값을 가진 process 를 kill 하여 memory 를 확보한다.
즉, OOM Killer 동작 전에 여유 메모리를 확보하는 안드로이드에서 추가된 모듈이다.
4. ANR 이란?
Application Not Responding의 약자로 Main Thread(안드로이드 에서는 UI Thread를 일컫는다) 가 일정 시간 이상 어딘가에 붙잡혔을 때, 발생되는 Error 다.
즉, UI 스레드가 오랫동안 블로킹 되었다. 라는 말이다.
사용자 Action 을 통한 이벤트가 5초 이상 지연될 경우, ANR 를 발생한다.
'Android Q&A > Android One a day' 카테고리의 다른 글
[안드로이드 면접] - 5: (0) | 2023.01.28 |
---|---|
[안드로이드 면접] - 4 : (0) | 2023.01.27 |
[안드로이드 면접] - 3 : (0) | 2023.01.26 |
[안드로이드 면접] - 2 : (0) | 2023.01.25 |
[안드로이드 면접준비] - 0 : 하루에 하나 (0) | 2023.01.21 |