当前位置:首页 » 安卓系统 » android应用内存占用

android应用内存占用

发布时间: 2023-04-17 02:40:59

‘壹’ android系统手机为什么什么软件也没运行,但是内存占了好多

手机运行整个Android系统需要一定的内存,部分系统程序和第三方程序也会开机自启动,所以占用了较多的内存,以致于开机后内存占用率比较高。
若是使用vivo手机,建议您时常一键加速来清理手机运行内存,并进入i管家--(应缺好用管理旁扮逗/软件管理)运卖--权限管理--自启动里面关闭不必要的自启动软件。

‘贰’ 如何检查 Android 应用的内存使用情况

Android是为移动设拦棚备而设计的,所以应该关注应用的内存使用情况。尽管Android的Dalvik虚拟机会定期执行垃圾回收操作,但这也不意味着就可以忽视应用在何时何处进行内存分配和释放。为了提供良好的用户体验,做到系统在不同应喊键用间流畅切换,当用户和应用无交互时,避免应用不必要的内存消耗是很重要的。尽管在开发过程中很好的遵守了《管理应用内存》(Managing Your App Memory )中的原则(也是应该遵守的),仍然可能会有对象泄露或引入其他的内存bug。唯一来确定应用使用了尽可能少的内存的方法,就是使用工具来分析应用的内存使用情况。本郑衡巧指南介绍了如何去调查内存使用情况。

‘叁’ Android 为什么用久了内存占用越来越多

因为安卓系统的优化不是那么好,在长期运行中会逐渐产生很多的垃圾和缓存,特别是运行内存。物亏有时哪怕把所有后来下载的应用程序都卸载了,发现也不会变得快。
给几个建议:
1,买安卓系统的手机,选择运行内存和存储内存大的。
2,定期使用手机管家或者360卫士清理手机,特别是qq和微信。
3,不要下载过多的、不常用的软件,以免占用过多的内存。
4,过一段手机将手机重携启启,可以优化,释放一定的内存辩蚂如,手机运行也会更好。

‘肆’ Android应用查看CPU与内存占用说明

命令中的"应用包名"应该替换为你需要查询的包名.
执行命令后, 在输出的内容中, 第二项即应用的进消昌程仿桥大名, 例如:

那么 22411 即为该应用当前的pid.

其中的"应用的pid"为上一步获取到的pid
执行命令后, 命令行工具即会打印应用运行信息

命令中的"应用包名"应该替换为你需要查询的包名.
命令备竖执行后过段时间即会打印内存占用大小.

‘伍’ Android如何统计应用占用内存

要获取过去三小时内应用内存占用情况统计信息可以使用如下命令:

会输出应用运行时间百分比,以及PSS(分摊内存大小),USS(独占内存大小),RSS(常驻内存大小)(minPSS-avgPSS-maxPSS/minUSS-avgUSS-maxUSS/minRSS-avgRSS-maxRSS over 样本数)

参考: https://developer.android.com/studio/command-line/mpsys#ViewingAllocations

‘陆’ android系统严格规定了每个应用所能分配的最大的内存为多少

Android应用程序的默认慎笑基最大内存值为16M,不同的手机版本和型号有所不同(我的三星galaxy s3的是256M)x0dx0ax0dx0a宽谨Android应用程序的默认最大内存值x0dx0ax0dx0a有些应用程序可能会出现内存溢出,譬如:x0dx0ax0dx0aERROR/AndroidRuntime(264): java.lang.OutOfMemoryError: bitmap size exceeds VM budgetx0dx0ax0dx0a除了要检查修正代码之外,还可以考虑修改Android应用程序的默认最升梁大内存值。

‘柒’ 如何检查 Android 应用的内存使用情况

检查 Android 应用的内存使用情况,可以使用adb.exe工具来执行shell指令,如下:

adb shell procrank
显示如下:
PID Vss Rss Pss Uss cmdline 190 79560K 74736K 49624K 43604K system_server14335 55776K 55740K 31308K 26676K com.android.launcher213074 47408K 47380K 24947K 22428K com.android.settings 7626 42060K 42028K 21312K 18432K com.android.systemui
注:
VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共卜郑享库占用的内存)
从以上的数据就腊弊哗可以看出手机内存的使用情况以及轮行各个进程所占用的内存大小。

‘捌’ 安卓的内存占用

相信不少朋友有这样的疑问,为什么手机4GB运行内存还卡?这到底应该谁背锅?看完这篇文章你就懂了。

2018年,主流品牌的旗舰机运行内存都飙升至了6GB,比如小米MIX2S、荣耀10,甚至连千元机的魅蓝E3也都全系标配6GB运行内存。这一配置升级的背后,反映了手机运行内存占用越来越大。

此前,Android系统的占用不过500MB左右,到现在Android 8.1,系统占用已经达到接近2GB;又比如微信,从一开始的30MB左右,如今已经达到220MB+的运行内存占用了。折算下来,4GB手机平均能常驻后台6个APP,相对而言有些捉襟见肘。因此,现在手机厂商纷纷将运行内存提升至6GB,这样能保证平均常驻大概11个后台。

那么,为什么APP要占用越来越多的运行内存呢?

首先,我们要站在开发者的角度来想。开发者和用户的思维不一样,他们不是努力的想要节省运行内存,而是想着如何利用更多的运行内存,以带来更流畅的体验——这么多运行内存,不用白不用,浪费太可惜。

结果,APP的运行内存占用就越来越大,这也使得常驻后台的APP数量不断减少。而为了给用户带来更流畅的体验,手机厂商们不得不把运行内存不断做大,从1GB到2GB,再到4GB、6GB、8GB。

然而,这又让开发者眼睛都亮了——正愁着怎么在运行内存和运行流畅度上进行平衡,没想到厂商那么好心,直接把运行内存做大了。于是开发者们又开启新一轮的运行内存占用了。

好了,单个APP为什么运行内存占用越来越大,你理解了吗?

但还有个问题,卡顿。有时候,明明只打开了一个APP,却还是有点卡的感觉。于是你就产生了“4GB、6GB运行内存不够用,安卓机必须上顶配”的感觉。那这个问题又要谁背锅呢?

这就要说到整个国内安卓生态了。笔者用的是Pixel 2,运行的是最纯净的Android系统。一段时间的使用下来,笔者印象最深刻的是国内APP的流氓程度,如果不用黑域进行限制,几乎分分钟就爆满运行内存了。

下面这张图,是笔者取消了黑域限制的后果。清空后台之后,隔了一段时间再看,启动了一堆APP,几乎都是国内APP。有些APP以前基本不打开,比如高德地图、京东,自启动情况非常严重。

所以,表面上你打开的是一个APP,其实背后已经运行了无数个APP。这样的情况下,想要不卡顿几乎是不可能的。值得一提的是,这些国内APP几乎都是从Google Play下载的(QQ被Google Play下架),显然流氓并不因审查机制的不同而不同。

这个锅到底谁背?开发者显然已经不是重点了,而是企业的态度问题。常驻后台,APP可以调用更多权限,记录用户更多的信息,并推送广告、消息。但问题是,比如地图APP的使用频率低,它那么积极的常驻后台是为何?对不起,笔者真的只能想到广告。

‘玖’ Android内存的相关排查方法

mpsys meminfo 是Android系统提供的查询内存命令,用该命令可以看到:
每个进程占用的物理内存大小
系统内存分布状态,包括
总的可用物理内存 Total RAM
当前可用物理内存 Free RAM
已用物理内存 Used RAM
不岩察可见内存 Lost RAM

比如输入该命令后输出如下日志:

该命令打印的最后一部分,反应物哗系统级别的内存状况:
Total RAM: 1015868 kB
Free RAM: 638914 kB (105418 cached pss + 180168 cached + 353328 free)
Used RAM: 211428 kB (186096 used pss + 8008 buffers + 520 shmem + 16804 slab)
Lost RAM: 165526 kB
Tuning: 96 (large 256), oom 20480 kB, restore limit 6826 kB (high-end-gfx)
里面某些字段的意义需要注意:
mpsys meminfo

OOM Killer(Out Of Memory Killer) 是Linux当中,内存保护机制的一种。当物理内存几乎耗尽而又需要分配新内存时,会杀掉一些优先级低的进程,释放内存。
LowMemoryKiller 是Android的内存保护机制。当物理内存低于阈值,就会杀掉一些优先级低的进程,释放内存。

联系:LowMemoryKiller 用到了 OOM Killer 的评分机制
区别:LowMemoryKiller 是通过阈值触发,OOM Killer 是分配内存失败时触发

评分原理:
oom_adj,代表进程的优先级, 数值越大,优先级越低,越容易被杀。系统分16个级别(取值范围[-16, 15]整数,不连续)
通过 cat /proc/xxx/oom_adj 查看,其中xxx是进程号
oom_score_adj: 在 oom_adj 基础上的评分,取值范围[-1000, 1000]
通过 cat /proc/xxx/oom_score_adj 查看,其中xxx是进程号

阈值查看,以98mv100为例:
cat /sys/mole/lowmemorykiller/parameters/minfree
1024,1536,2048,3072,3584,4096
cat /sys/mole/lowmemorykiller/parameters/adj
0,58,117,176,529,1000
上诉数值表示:可用内存低于 4096 4K 时,杀掉 oom_score_adj>=1000 的应用;可用内存低于 3584 4K 时,杀掉 oom_score_adj>=529 的应用,以此类推。

因此,客户可以通过调整 minfree 的阈值来触发 LowMemoryKiller 更频繁地杀应用,从而为高优先级应用省下内存。

在 mpsys meminfo 中,GPU内存被统计到了 Lost RAM 里面罩枣行了。

因此,当应用占用GPU内存过高时,不会体现在 Used RAM 里面,而是体现在 Lost RAM 中。反过来,如果发现有问题的时候 Lost RAM 很高,就需要看看GPU内存使用情况了。用以下命令:�
mount -t debugfs debugfs /sys/kernel/debug/
cat /sys/kernel/debug/mali/gpu_memory

130|root@MR820:/ # cat /sys/kernel/debug/mali/gpu_memory
Name (:bytes) pid mali_mem max_mali_mem external_mem ump_mem dma_mem

其中mali_mem列就是应用占用的GPU内存

‘拾’ 如何检查 Android 应用的内存使用情况

进入设置---应用程序---正在闹源运行一栏,就能看到具体使用的内存了液亮态。键棚

热点内容
存储巴士x250 发布:2024-05-17 22:21:30 浏览:568
别墅中央空调地暖如何配置最好 发布:2024-05-17 22:20:09 浏览:929
php安装mbstring 发布:2024-05-17 22:09:56 浏览:471
单向板中配置哪些钢筋 发布:2024-05-17 22:09:16 浏览:797
winftp下载 发布:2024-05-17 21:51:33 浏览:693
压缩板包装 发布:2024-05-17 21:44:59 浏览:264
安卓大屏怎么安装手机卡 发布:2024-05-17 21:39:09 浏览:753
xml导入sql 发布:2024-05-17 21:34:13 浏览:527
苹果x怎么清除缓存 发布:2024-05-17 21:34:00 浏览:786
我的世界红石怎么卡服务器 发布:2024-05-17 21:03:53 浏览:44