内存与 GC 知识体系概览
问题
Android 应用的内存管理机制是怎样的?
答案
Android 内存模型
每个 Android 应用运行在独立的 ART 虚拟机进程中,有自身的堆(Heap)空间。系统根据设备内存和应用前后台状态分配堆大小。
堆大小限制
# 查看设备堆大小限制
adb shell getprop dalvik.vm.heapsize # 最大堆(一般 256-512MB)
adb shell getprop dalvik.vm.heapgrowthlimit # 普通应用限制(一般 128-256MB)
| 内存区域 | 说明 |
|---|---|
| Java Heap | 对象存活区域,GC 管理 |
| Native Heap | JNI 分配、Bitmap(8.0+) |
| Code | dex/oat 映射 |
| Stack | 线程栈空间 |
| Graphics | GPU 纹理、Surface |
ART GC 特点(vs Dalvik)
| 特性 | Dalvik | ART |
|---|---|---|
| GC 方式 | Mark-and-Sweep,STW 长 | Concurrent Copying,STW 极短 |
| 堆碎片 | 有 | 压缩整理,无碎片 |
| 分配速度 | 慢 | 快(TLAB 线程本地分配) |
| 编译 | JIT | AOT + JIT(Android 7.0+) |