Сколько экземпляров Heap в Android-приложении

«Сколько экземпляров Heap в Android-приложении» — вопрос из категории Управление памятью, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Android-приложении обычно один Heap (куча) на процесс. Однако есть исключения:

  1. Основной процесс и каждый выделенный процесс (например, сервис с android:process) имеют свою кучу
  2. Нативные библиотеки могут использовать собственную кучу через malloc/new
  3. ART/Dalvik и нативный код (NDK) работают с одной кучей, но могут фрагментировать её по-разному

Пример с несколькими процессами в манифесте:

<service 
    android:name=".MyService"
    android:process=":remote" />

При этом:

  • Основное приложение и сервис будут в разных процессах
  • Каждый получит свою кучу с отдельным лимитом памяти
  • OOM в одном процессе не затронет другой