android内存管理了解

android内存管理了解

ID:36048614

大小:1.30 MB

页数:26页

时间:2019-05-01

android内存管理了解_第1页
android内存管理了解_第2页
android内存管理了解_第3页
android内存管理了解_第4页
android内存管理了解_第5页
资源描述:

《android内存管理了解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android内存管理认识目录LowMemoryKillerAshmemPmemdalvik虚拟机内存管理低内存管理器(LowMemoryKiller)低内存管理器(LowMemoryKiller),相对于Linux标准OOM(OutOfMemory)机制更加灵活,它可以根据需要杀死进程来释放需要的内存。源代码位于drivers/staging/Android/lowmemorykiller.c匿名共享内存(ashmem),为进程间提供大块共享内存,同时为内核提供回收和管理这个内存的机制。源代码位于mm/ashmem.c

2、AndroidPMEM(Physical),PMEM用于向用户空间提供连续的物理内存区域,DSP和某些设备只能工作在连续的物理内存上。源代码位于drivers/misc/pmem.cLowMemoryKiller的实现LowMemoryKiller的源代码在drivers/staging/android/lowmemorykiller.c中,它是通过注册CacheShrinker来实现的。CacheShrinker是标准linuxkernel回收内存页面的一种机制,它由内核线程kswapd监控,当空闲内存页面不足时,ks

3、wapd会调用注册的Shrinker回调函数,来回收内存页面。LowMemoryKiller是在模块初始化时注册CacheShrinker的,代码如下:staticint__initlowmem_init(void){register_shrinker(&lowmem_shrinker);//注册CacheShrinkerreturn0;}lowmem_shrinker的定义如下:staticstructshrinkerlowmem_shrinker={.shrink=lowmem_shrink,.seeks=DEFAU

4、LT_SEEKS*16};register_shrinker会将lowmem_shrink加入ShrinkerList中,被kswapd在遍历ShrinkerList时调用,而LowMemoryKiller的功能就是在lowmem_shrink中实现的。lowmem_shrink用两个数组作为选择Bad进程的依据,这两个数组的定义如下:staticintlowmem_adj[6]={ 0, 1, 6, 12, }; staticintlowmem_adj_size=4; staticsize_tlowmem_minfre

5、e[6]={ 3*512,//6MB 2*1024,//8MB 4*1024,//16MB 16*1024,//64MB };lowmem_shrink首先计算当前空闲内存的大小,如果小于某个阈值,则以该阈值对应的优先级为基准,遍历各个进程,计算每个进程占用内存的大小,找出优先级大于基准优先级的进程,在这些进程中选择优先级最大的杀死,如果优先级相同,则选择占用内存最多的进程。lowmem_shrink杀死进程的方法是向进程发送一个不可以忽略或阻塞的SIGKILL信号:force_sig(SIGKILL,selected)

6、;用户接口设置空闲内存阈值的接口:/sys/module/lowmemorykiller/parameters/minfree,设置对应优先级的接口:/sys/module/lowmemorykiller/parameters/adj,设置各个进程优先级的接口:/proc/<进程pid>/oom_adj。Android启动时读取的配置文件/init.rc中定义了相应的属性供AP使用并有设置这些参数。将init进程oom_adj设置为-16,从而保证init进程永远不会被杀掉。Ashmem相关介绍基本原理Android的A

7、shmem是一种共享内存的机制,它基于mmap系统调用,不同进程可以将同一段物理内存映射到各自的虚拟地址控制,从而实现共享。Ashmem与mmap的区别mmap通过映射同一个普通文件实现进程间共享内存,普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read,write等操作。进程在映射空间对共享内存的改变并不直接写回到磁盘文件中,在调用munmap后才执行此操作。可以通过调用msync实现磁盘上文件内存与共享内存区的内容一致。Ashmem与mmap的区别在于Ashmem与caches

8、hrinker关联起来,可以控制cacheshrinker在适当时机回收这些共享内存。Ashmem的实现Ashmem的源代码在mm/ashmem.c中,它通过注册CacheShrinker回收内存,通过注册misc设备提供open,mmap等接口,mmap则通过tmpfs创建文件来分配内存,tmpfs将一块内存虚拟为

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。