Android内存管理:LowMemoryKiller与 ashmem、pmem

需积分: 10 12 下载量 84 浏览量 更新于2024-08-25 收藏 1.3MB PPT 举报
"用户接口-android内存管理" Android内存管理系统是一个复杂且高效的框架,它涉及到多个层次的内存管理和优化,包括LowMemoryKiller、Ashmem、Pmem以及Dalvik虚拟机的内存管理。下面是这些核心组件的详细说明: 1. **LowMemoryKiller**:这是Android系统特有的内存管理机制,相比Linux标准的OOM机制,它更具有灵活性。LowMemoryKiller可以根据系统的内存需求动态地杀死后台进程,以防止系统因内存不足而崩溃。它的实现基于Cache Shrinker,通过在内核中注册一个回调函数`lowmem_shrink`,当内存不足时,由kswapd内核线程调用这个函数来决定哪些进程应该被优先释放。在`drivers/staging/android/lowmemorykiller.c`中,可以看到LowMemoryKiller的初始化和注册过程。 2. **Ashmem**:全称为Anonymous Shared Memory,是Android提供的一种用于进程间通信的机制,允许不同进程共享大块的内存。Ashmem允许内核管理这部分内存,确保其有效回收和分配。其源代码位于`mm/ashmem.c`,在Android系统中,它为高效的数据交换提供了可能,尤其是在需要高速数据传输的情况下。 3. **Pmem**:Physical Memory,主要用于向用户空间提供连续的物理内存区域,特别适合那些依赖连续内存的硬件,如DSP或某些特定设备。Pmem驱动位于`drivers/misc/pmem.c`,它使得硬件可以更有效地访问和操作内存,提高了系统的性能。 4. **Dalvik虚拟机内存管理**:在早期的Android系统中,Dalvik虚拟机负责应用的运行,它有自己的内存管理策略。Dalvik虚拟机使用了一种称为“Dalvik堆”的内存分配机制,它会根据应用的需求动态地分配和回收内存。虚拟机还会对对象进行垃圾收集,以自动释放不再使用的内存。 Android启动时,这些内存管理机制的相关参数会被加载到内存中,例如,通过`/sys/module/lowmemorykiller/parameters/minfree`和`/sys/module/lowmemorykiller/parameters/adj`等文件设置LowMemoryKiller的阈值和进程优先级。另外,`/proc/<进程pid>/oom_adj`文件用来调整特定进程的OOM分数,以影响其在内存压力下的存活概率。 Android内存管理的目的是在有限的资源下,确保系统的稳定性和应用的流畅运行。通过精细的内存分配、回收以及进程优先级的调整,Android能够有效地应对内存紧张的情况,避免不必要的系统崩溃,提高用户体验。