2014-01-17 4 views
3

아시다시피 Android는 응용 프로그램 메모리 크기에 제한을 설정합니다. 대개 16M입니다. 그러나 나는 혼란 스럽다 : 1) 누가 한도를 수행 하는가? 누가 OOM을 생성하고 앱을 죽입니까? 2) 16M에는 Java 힙과 원시 힙 또는 Java 힙이 모두 포함됩니까?Android OOM은 어떻게 작동합니까?

원래 DalvikVM이 기본 힙을 제어 할 수 있다고 생각하지 않기 때문에 제한을 수행하는 DalvikVM이고 16M 만 Java 힙을 포함한다고 생각했습니다. 그러나 일부 기사에서는 네이티브 힙에 비트 맵 메모리가 포함되어 있다고 말했습니다. 그래서, 내 질문에 어떻게 DalvikVM 네이티브 힙을 관리 할 수 ​​있습니다? Android OOM은 어떻게 작동합니까?

답변

3

안드로이드는 일반적으로 요즘 16M

, 응용 프로그램 메모리 크기에 제한이 디바이스는 OS 레벨과 화면 해상도에 묶여 다소 더 큰 힙을해야합니다.

1) 누가 제한을 수행합니까? 누가 OOM을 생성하고 앱을 죽입니까?

Dalvik VM.

2) 16M에는 Java 힙과 원시 힙 또는 Java 힙이 모두 포함되어 있습니까?

하나의 주목할만한 예외가 있습니다. Android 1.x/2.x에서 비트 맵은 Dalvik 힙의 작은 스텁 (8 바이트 정도)으로 표시되었으며 나머지 데이터는 기본 메모리에 저장되었습니다. 대부분의 메모리가 기술적으로 힙 외부에 있더라도 이러한 비트 맵은 여전히 ​​힙 예산에 따라 계산됩니다. 안드로이드 3.0은 모든 비트 맵 메모리를 힙에 가져 왔습니다.

+0

나를 혼란스럽게 만드는 것은 비트 맵입니다. 당신의 설명에 감사드립니다! – Dagang

+0

또 다른 질문은 Java 힙에 대한 제한이있는 경우 JNI 응용 프로그램이 16M보다 훨씬 더 큰 메모리 크기를 가질 수 있다는 것입니다. – Dagang

+0

@Todd : JNI 코드는 장치에서 사용할 수있는만큼의 RAM을 할당 할 수 있습니다. 그렇다고해서 사용자 관점에서 볼 때, 힙을 대량으로 사용하는 앱이 멀티 태스킹을 방해하는 것처럼 좋은 아이디어는 아닙니다. – CommonsWare

관련 문제