Ответ
В Android-приложении обычно один Heap (куча) на процесс. Однако есть исключения:
- Основной процесс и каждый выделенный процесс (например, сервис с
android:process) имеют свою кучу - Нативные библиотеки могут использовать собственную кучу через
malloc/new - ART/Dalvik и нативный код (NDK) работают с одной кучей, но могут фрагментировать её по-разному
Пример с несколькими процессами в манифесте:
<service
android:name=".MyService"
android:process=":remote" />
При этом:
- Основное приложение и сервис будут в разных процессах
- Каждый получит свою кучу с отдельным лимитом памяти
- OOM в одном процессе не затронет другой