android内存文件
A. Android系统内存管理
部分内容出至林学森的Android内核设计思想。
Android官网内存管理
部分出至 https://www.jianshu.com/p/94d1cd553c44
Android本质是Linux所以先从Linux说起。
Linux的内存管理为系统中所有的task提供可靠的内存分配、释放和保护机制。
核心:
虚拟内存
内存分配与释放
内存保护
将外存储器的部分空间作为内存的扩展,如从硬盘划出4GB大小。
当内存资源不足时,系统按照一定算法自动条形优先级低的数据块,并把他们存储到硬盘中。
后续如果需要用到硬盘中的这些数据块,系统将产生“缺页”指令,然后把他们交换回内存中。
这些都是由操作系统内核自动完成的,对上层应用”完全透明“。
每个进程的逻辑地址和物理地址都不是直接对应的,任何进程都没办法访问到它管辖范围外的内存空间——即刻意产生的内存越界与非法访问,操作系统也会马上阻止并强行关闭程序,从而有力的保障应用程序和操作系统的安全和稳定。
一旦发现系统的可用内存达到临界值,机会按照优先级顺序,匆匆低到高逐步杀掉进程,回收内存。
存储位置:/proc/<PID>/oom_score
优先级策略:
进程消耗的内存
进程占用的CPU时间
oom_adj(OOM权重)
Android平台运行的前提是可用内存是浪费的内存。它试图在任何时候使用所有可用的内存。例如,系统会在APP关闭后将其保存在内存中,以便用户可以快速切换回它们。出于这个原因,Android设备通常运行时只有很少的空闲内存。在重要系统进程和许多用户应用程序之间正确分配内存内对存管理是至关重要。
Android有两种主要的机制来处理低内存的情况:内核交换守护进程(kernel swap daemon)和低内存杀手(low-memory killer)。
当用户在APP之间切换时,Android会在最近使用的(LRU)缓存中保留不在前台的APP,即用户看不到的APP,或运行类似音乐播放的前台服务。如果用户稍后返回APP,系统将重用该进程,从而使APP切换更快。
如果你的APP有一个缓存进程,并且它保留了当前不需要的内存,那么即使用户不使用它,你的APP也会影响系统的整体性能。由于系统内存不足,它会从最近使用最少的进程开始杀死LRU缓存中的进程。该系统还负责处理占用最多内存的进程,并可以终止这些进程以释放RAM。
当系统开始终止LRU缓存中的进程时,它主要是自底向上工作的。系统还考虑哪些进程消耗更多的内存,从而在终止时为系统提供更多的内存增益。你在LRU列表中消耗的内存越少,你就越有可能留在列表中并能够快速恢复。
为了满足RAM的所有需求,Android尝试共享RAM来跨进程通信。它可以做到以下方式:
Android设备包含三种不同类型的内存:RAM、zRAM和storage。
注意:CPU和GPU都访问同一个RAM。
内存被拆分成页。通常每页有4KB的内存。
页面被认为是空闲的或已使用的。
空闲页是未使用的RAM。
已使用页是系统正在积极使用的RAM,分为以下类别:
干净的页面(Clean pages)包含一个文件(或文件的一部分)的一份精确副本存在存储器上。当一个干净的页面不再包含一个精确的文件副本(例如,来自应用程序操作的结果)时,它就变成了脏页。可以删除干净的页,因为它们始终可以使用存储中的数据重新生成;不能删除脏页(Dirty pages),否则数据将丢失。
内核跟踪系统中的所有内存页。
当确定一个应用程序正在使用多少内存时,系统必须考虑shared pages。APP访问相同的服务或库将可能共享内存页。例如,Google Play Services 和一个游戏APP可能共享一个位置服务。这使得很难确定有多少内存属于这个服务相对于每个APP。
当操作系统想要知道所有进程使用了多少内存时,PSS非常有用,因为页面不会被多次计数。PSS需要很长时间来计算,因为系统需要确定哪些页面是共享的,以及被有多少进程。RSS不区分共享页面和非共享页面(使计算速度更快),更适合于跟踪内存分配的更改。
内核交换守护进程(kswapd)是Linux内核的一部分,它将使用过的内存转换为空闲内存。当设备上的空闲内存不足时,守护进程将变为活动状态。Linux内核保持低和高的可用内存阈值。当空闲内存低于低阈值时,kswapd开始回收内存。当空闲内存达到高阈值,kswapd将停止回收内存。
kswapd可以通过删除干净的页面来回收干净的页面,因为它们有存储器支持并且没有被修改。如果进程试图寻址已删除的干净页,则系统会将该页从存储器复制到RAM。此操作称为请求分页。
kswapd将缓存的私有脏页(private dirty pages)和匿名脏页(anonymous dirty pages)移动到zRAM进行压缩。这样做可以释放RAM中的可用内存(空闲页)。如果进程试图触摸zRAM中脏页,则该页将被解压缩并移回RAM。如果与压缩页关联的进程被终止,则该页将从zRAM中删除。
如果可用内存量低于某个阈值,系统将开始终止进程。
lmkd实现源码要在system/core/lmkd/lmkd.c。
lmkd会创建名为lmkd的socket,节点位于/dev/socket/lmkd,该socket用于跟上层framework交互。
小结:
LMK_TARGET: AMS.updateConfiguration() 的过程中调用 updateOomLevels() 方法, 分别向/sys/mole/lowmemorykiller/parameters目录下的minfree和adj节点写入相应信息;
LMK_PROCPRIO: AMS.applyOomAdjLocked() 的过程中调用 setOomAdj() 向/proc/<pid>/oom_score_adj写入oom_score_adj后直接返回;
LMK_PROCREMOVE: AMS.handleAppDiedLocked 或者 AMS.() 的过程,调用remove(),目前不做任何事,直接返回;
为了进一步帮助平衡系统内存并避免终止APP进程,可以Activity类中实现ComponentCallbacks2接口。提供的onTrimMemory()回调方法允许APP在前台或后台侦听与内存相关的事件,然后释放对象以响应应用程序生命周期或表明系统需要回收内存的系统事件。
onTrimMemory()回调是在Android 4.0(API级别14)中添加的。
对于早期版本,可以使用onLowMemory(),它大致相当于TRIM_MEMORY_COMPLETE事件。
一个专门的驱动。(Linux Kernel 4.12 已移除交给kswapd处理)。
很多时候,kswapd无法为系统释放足够的内存。在这种情况下,系统使用onTrimMemory()通知APP内存不足,应该减少其分配。如果这还不够,内核将开始终止进程以释放内存,它使用低内存杀手(LMK)来完成这个任务。
为了决定要终止哪个进程,LMK使用一个名为oom_adj_score的“out of memory”分数来确定运行进程的优先级,高分的进程首先被终止。
后台应用程序首先被终止,系统进程最后被终止。
下表列出了从高到低的LMK评分类别。第一排得分最高的项目将首先被杀死:
Android Runtime(ART)和Dalvik虚拟机使用分页(Paging)和内存映射(mmapping)来管理内存。应用程序通过分配新对象或触摸已映射页面来修改内存都将保留在RAM中,并且不能被调出。应用程序释放内存的唯一方式是垃圾收集器。
B. Android手机内存卡中的文件夹分别代表什么软件
SD卡中的文件夹,基本上都是系统软件和第三方软件的数据存储的地方。一般看文件夹名称就能看出是属于哪个软件的。比如tencent,就是腾讯的英文名,自然就是QQ和微信的数据所在地。微信传送的图片什么的,都在这里。
另外,常见的文件夹名称及其作用如下:
一、系统数据类——系统文件存储相关文件夹
1、.android_secure:官方app2sd的产物,存储了相关的软件使用认证验证,删除之后SD卡中的软件将无法使用。
2、Android:存放重要的程序数据,比如google:map的地图缓存,误删掉后地图还需重新下载。
3、backups:包含重要的备份文件,比如联系人导出到SD卡会导入到此文件夹。
4、bugtogo:系统出现问题的时候会形成一些报告文件,存放在此文件夹。
5、data:缓存数据文件夹,与Android类似。例如,“截图助手”截图保存在datacom.edwardkim.android.screenshotitfullscreenshots里。
6、LOST.DIR:卡上丢失或出错的文件会移动到这里,此目录删了会自动生成。
7、SystemAppBackup:SystemAppremove(深度卸载)备份系统文件后,备份文件保存的目录。
8、bugreports:升级系统或刷机,系统和程序发生兼容错误报告列表(包括内存使用全部内容)将保存在这个文件,重起机器可以删除。
9、.keepsafe:隐藏类的软件、加密保存文件地址存放于此。
10、.thumbs:浏览或使用某一软件,以及使用某一文件夹后用于记录次数和内容的文件,随机产生,需要定期不断清除,长时间不清理会大量占用储存卡的有效空间。
11、openfeint:打开联接网络后的一个启动程序,它广泛植入移动类平台发布的软件或游戏,是更新下载或评论反馈信息的记录地址,可删除。
12、com:播放类软件在收看播放影视节目生成的文件将存放于此,可以对制作方反映回馈信息,可以删除。
13、Download(download):大写字母的是网络联接下载文件目录,小写字母的是手机自身(蓝牙,近场等)存放下载传输文件,不要误删。
二、系统工具类——系统自带工具相关文件夹
1、albumart:音乐专辑封面的缓存文件夹。
2、albums:相册缩略图的缓存文件夹。
3、cmp:音乐的缓存文件夹。
4、Playlists:播放列表的缓存文件夹。
5、DCIM:相机随机缓存文件夹,记录功能设置的参数,需要及时清理。一些第三方相机软件拍出的相片也会保存在这里,比如360或晕影相机等。
6、VPN:VPN数据的缓存目录。
7、Mydocuments:手机启用各种程序任务记录的文档,需要定期清除,长时间不清理会占用SD卡较大内存。
8、.nomedia:手机中隐藏的音频、图片文件夹都会在这里显示,可以自设在相关文件夹中。
9、media:使用电话通话录音软件或在线浏览视频等媒体产生的音频文件记录存档将保存在此。
10、.medieval_software:启用蓝牙传输软件时,记录任务保存文件的目录。
11、extracted:解压缩软件默认的解压目录。
三、第三方应用类
1、.mobo:Moboplayer的缓存文件。
2、.QQ:QQ的缓存文件,需要定期清除。
3、.quickoffice:quickoffice的缓存文件。
4、.switchpro:switchprowidget(多键开关应用)的缓存文件。
5、.ucdlres:UC迅雷的缓存文件。
6、:掌上网络、网络输入法之类程序的缓存文件夹。
7、etouch:易行的缓存文件夹。
8、documents:DocumentsToGo的相关文件夹。
9、gameloft:gameloft游戏数据包存放的文件夹。
10、handcent:handcent(超级短信)数据文件夹。
11、handyCurrency:货币汇率相关的文件夹,装了handycalc(科学计算器)之后才会有。
12、ireader:ireader的缓存文件夹。
13、KingReader:开卷有益的缓存文件夹:下载的文件和应用都在这儿:删除时留意看清
14、LazyList:Applanet的缓存目录,慎重使用。
15、moji:墨迹天气的缓存目录。
16、MusicFolders:poweramp产生的缓存文件夹。
17、openfeint:openfeint的缓存文件夹。
18、Picstore:图片浏览软件建立的一个目录。
19、renren:人人网客户端的缓存文件夹。
20、screenshot:截屏图片保存的目录。
21、ShootMe:shootme截屏后图片文件保存的目录。
22、SmartpixGames:SmartpixGames出品游戏的缓存文件夹,比如Jewellust。
23、sogou:搜狗拼音输入法的随机缓存文件夹,可以删除。
24、SpeedSoftware:RE文件管理器的缓存文件夹。
25、TalkingFriends:talkingtom(会说话的tom猫)录制的视频文件所保存的目录。
26、Tencent:腾讯软件的缓存目录,比如QQ。(与上面的.QQ文件夹并不相同)
27、TitaniumBackup:钛备份备份的程序所保存的目录。
28、TunnyBrowser:感觉是海豚浏览器的缓存目录,但为什么叫这个名字?金枪鱼浏览器...。.
29、UCDLFiles:UC迅雷下载文件的保存目录。
30、UCDownloads:UC浏览器下载文件缓存的保存目录。
31、VIE:Vignette(晕影相机)的缓存目录。
32、yd_historys:有道词典搜索历史的缓存目录
33、yd_speech:有道词典单词发音的缓存目录。
34、youmicache:删掉后还会自动生成,悠米广告的缓存目录,广告程序内嵌在其程序中。
35、Glu:Glu系列游戏的资料包存放地,如3D猎鹿人,勇猛二兄弟等。
36、apadqq-images:QQforpad的缓存目录。
37、DunDef:地牢守护者的数据包。
38、KuwoMusic:酷我音乐的相关文件夹。
39、MxBrowser:遨游的缓存目录。
40、Camera360:相机camera360的随机缓存目录,可以定期清除。
41、TTPod:天天动听的缓存目录。
42、downloaded:刷了MIUI,升级后的ZIP刷机包,保存在downloaded_rom里。
43、.estrongs:当你使用了ES文件管理器解压文件,会有这个缓存记录。它反映使用进程,可以删除。
44、silentR:用了后台录音软件,自生的音频文件夹,子文件夹phoneCalls,定期管理清除
45、3D-compass:这是使用实景指南针软件,生成的景象图片(图像和数字比较详细)文件夹,可以清除。
46、PDF:可移植文档格式,Pdf阅读器存储文件夹。
47、Zidanyou:是字典的词库文件储存,删除了要重新下载词库。
48、Callrecords:采用第三方强制双向录音软件(手机未root),音频文件保存。
49、VPlayerPro:是MOBO等视频播放器使用后的记录定期删除。
50、BeWeather(Videos):是气象类软件(如黑莓天气.。.等)附加下载音频或动画图标的储存地址,删除了会无图无声显示。
51、thumbnails:用第三方播放器观看手持移动类视频媒体时,存放点击暂停、随机截图以及文件储存时产生的内容。
52、iQuran(meta2):可兰经浏览文本和音频的储存文件。
53、Autodesk:手机系统自带存储器命令生成文件夹:储存图像或编写文稿,可以查看、备份或者删除。
54、PixlrOMatic:后期特效处理图片软件Pixlo,储存文件夹,打开可以预览看效果。
55、mapbar:图吧导航地图存放文件,有必须主文件和不同地区具体地图,主文件删掉要重下!
56、antTTS:是使用了高德导航选择语音种类导航、语种的下载地址,删掉了语音提示会丢失。
57、kingsoft:金山词霸专用文件夹下载储存词库、更新拓展文汇(官方发布修正补充)。
58、NightVisionCamera:夜间拍照相机相片存放的地址。
59、DSA:电子狗专用夹,收录各地区道路探头监控位置信息,会定期更新。已测试配合高德、凯立德提前预警,效果不错。
60、apexlauncher:尖端桌面启动器文件夹,位置在andriod/data/,放置桌面设置备份bak文件。
C. 怎么查看安卓手机自身内存里的文件夹
1、首先在手机中,打开可以查看文件的软件,如下图所示。