网站大量收购独家精品文档,联系QQ:2885784924

android内存管理了解课件.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
android内存管理了解课件

Android内存管理认识 目录 Low Memory Killer Ashmem Pmem dalvik虚拟机内存管理 低内存管理器(Low Memory Killer) 低内存管理器(Low Memory Killer) ,相对于Linux标准OOM(Out Of Memory)机制更加灵活,它可以根据需要杀死进程来释放需要的内存。 源代码位于drivers/staging/Android/lowmemorykiller.c 匿名共享内存(ashmem) ,为进程间提供大块共享内存,同时为内核提供回收和管理这个内存的机制。 源代码位于mm/ashmem.c Android PMEM(Physical) ,PMEM用于向用户空间提供连续的物理内存区域,DSP和某些设备只能工作在连续的物理内存上。 源代码位于drivers/misc/pmem.c Low Memory Killer的实现 Low Memory Killer的源代码在drivers/staging/android/lowmemorykiller.c中,它是通过注册Cache Shrinker来实现的。Cache Shrinker是标准linux kernel回收内存页面的一种机制,它由内核线程kswapd监控,当空闲内存页面不足时,kswapd会调用注册的Shrinker回调函数,来回收内存页面。 Low Memory Killer是在模块初始化时注册Cache Shrinker的,代码如下: static int __init lowmem_init(void){ register_shrinker(lowmem_shrinker); // 注册 Cache Shrinker return 0; } lowmem_shrinker的定义如下: static struct shrinker lowmem_shrinker = { .shrink = lowmem_shrink, .seeks = DEFAULT_SEEKS * 16 }; register_shrinker 会将lowmem_shrink 加入Shrinker List 中,被kswapd 在遍历Shrinker List 时调用,而Low Memory Killer 的功能就是在lowmem_shrink 中实现的。 lowmem_shrink 用两个数组作为选择Bad 进程的依据,这两个数组的定义如下: static int lowmem_adj[6] = { 0, 1, 6, 12, }; static int lowmem_adj_size = 4; static size_t lowmem_minfree[6] = { 3*512, // 6MB 2*1024, // 8MB 4*1024, // 16MB 16*1024, // 64MB }; lowmem_shrink 首先计算当前空闲内存的大小,如果小于某个阈值,则以该阈值对应的优先级为基准,遍历各个进程,计算每个进程占用内存的大小,找出优先级大于基准优先级的进程,在这些进程中选择优先级最大的杀死,如果优先级相同,则选择占用内存最多的进程。 lowmem_shrink 杀死进程的方法是向进程发送一个不可以忽略或阻塞的SIGKILL 信号: force_sig(SIGKILL, selected); 用户接口 设置空闲内存阈值的接口:/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 的Ashmem是一种共享内存的机制,它基于mmap系统调用,不同进程可以将同一段物理内存映射到各自的虚拟地址控制,从而实现共享。 Ashmem与mmap的区别 mmap通过映射同一个普通文件实现进程间共享内存,普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read,write等操作。进程在映射空间对共享内存的改变并不直接写回到磁盘文件中,在调用munmap后才执行此

您可能关注的文档

文档评论(0)

gm8099 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档