Android知识:共享内存

机构:东莞达内 时间:2016-07-27 点击:979

  每一个app的进程都是从一个被叫做Zygote的进程中fork出来的。Zygote进程在系统启动并且载入通用的framework的代码与资源之后开始启动。为了启动一个新的程序进程,系统会fork Zygote进程生成一个新的进程,然后在新的进程中加载并运行app的代码。这使得大多数的RAM pages被用来分配给framework的代码,同时使得RAM资源能够在应用的所有进程中进行共享。

  大多数static的数据被mmapped到一个进程中。这不仅仅使得同样的数据能够在进程间进行共享,而且使得它能够在需要的时候被paged out。例如下面几种static的数据:

  Dalvik 代码 (放在一个预链接好的 .odex 文件中以便直接mapping);

  App resources (通过把资源表结构设计成便于mmapping的数据结构,另外还可以通过把APK中的文件做aligning的操作来优化)

  传统项目元素,比如 .so 文件中的本地代码.

  在很多情况下,Android通过显式的分配共享内存区域(例如ashmem或者gralloc)来实现一些动态RAM区域能够在不同进程间进行共享。例如,window surfaces在app与screen compositor之间使用共享的内存,cursor buffers在content provider与client之间使用共享的内存。

  更多资讯,请访问东莞Android课程培训学校

返回顶部