找回密码
 加入我们
搜索
      
查看: 1936|回复: 29

[内存] 如果安卓配置为针对某个app限制内存和虚拟内存占用量,会发生什么情况?

[复制链接]
发表于 2024-3-8 10:57 来自手机 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2024-3-8 11:04 | 显示全部楼层
很久以前用过,那时候内存普遍很小,效果就是闪退+卡顿,可以运行的APP变多,弊大于利

后来出现了所谓内存压缩和Swap,代价是变卡和flash寿命缩减

所以现在一般没这么多花花绕绕,直接大内存,最多开内存压缩
 楼主| 发表于 2024-3-8 11:06 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2024-3-8 11:09 | 显示全部楼层
看一下 /proc/swaps, 你的 android 设备使用的 swap 不一定是闪存, 可能是 zram
 楼主| 发表于 2024-3-8 11:11 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2024-3-8 11:13 | 显示全部楼层
slymitec 发表于 2024-3-8 11:11
嗯嗯,总之使用闪存当内存的广义上虚拟内存页面文件(或类似形式)这种方式都重点加以限制,避免io卡顿。 ...

swap 的作用只是充当紧急内存/禁用 swap 能改善性能也是常见的误解.
推荐阅读: https://chrisdown.name/2018/01/02/in-defence-of-swap.html
发表于 2024-3-8 11:14 | 显示全部楼层
slymitec 发表于 2024-3-8 11:06
我总觉得,内存不够造成卡顿的原因,是频繁动用虚拟内存页面文件。

毕竟闪存io性能摆在那里(远远不如内 ...

大概八九年前就不用flash做swap了,直接内存压缩,好几种方案,楼上的算其中一种

APP不管这个参数

这个参数的意义是告诉操作系统,什么时候清理APP,什么时候kill掉APP
 楼主| 发表于 2024-3-8 11:16 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2024-3-8 11:19 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2024-3-8 11:54 | 显示全部楼层
会OOM啊,直接崩啊
这不是很显而易见的事情么
 楼主| 发表于 2024-3-8 12:00 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2024-3-8 12:31 来自手机 | 显示全部楼层
会变卡而已
 楼主| 发表于 2024-3-8 12:36 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2024-3-8 12:44 来自手机 | 显示全部楼层
slymitec 发表于 2024-3-8 12:36
根据本帖的上下文 是因为什么具体原因卡呢

app其实也想省点内存,但是这是要权衡的,一般多占用的都是用来做预加载和缓存为主,不够了就少缓存点,代价就是要等实时加载所以会变卡,当然比如你限制A的内存,那省下来的内存给b用,b是受益的
 楼主| 发表于 2024-3-8 12:50 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2024-3-8 13:01 | 显示全部楼层
Android app卡不卡并不是看虚拟内存的页变动,你说的只是其中一个可能的因素。
Android app卡有很多方面的原因,比如ui绘制卡顿、cpu处理卡顿、内存抖动导致的卡顿、网络请求过慢、某个rom魔改底层代码、还有你提到的io卡顿等等也是有的。
常规情况下,界面绘制信号是16ms,因此只要你随便一个部分处理时间超过了16ms,就会发生丢帧,也就是卡顿。
像开发者就有很多工具去检测,比如systrace等,然而实际上用户上报的卡顿场景非常不容易复现而且很复杂,并不能全部都处理掉,都是尽可能的处理。
这种涉及到app优化的部分都是面试可以聊2个小时都聊不完的那种。
 楼主| 发表于 2024-3-8 13:04 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2024-3-8 13:10 | 显示全部楼层
安卓手机内存都到16G 了 就跑一个微信 ,比电脑的内存都大了.
发表于 2024-3-8 15:21 | 显示全部楼层
slymitec 发表于 2024-3-8 12:00
具体程序代码设计的, 相当于申请堆内存失败返回null,程序员总得显式处理这个事情 ...

你好,不会的,现在有多少个会直接手动管理内存的,
安卓这种甚至跑jvm的,内存管理都基本上闭上眼睛用了。
发表于 2024-3-8 15:28 来自手机 | 显示全部楼层
国产 app 可不是吃素的,
一旦发现你做了这种限制,绝对给你使脸色看
 楼主| 发表于 2024-3-8 17:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2024-3-8 18:23 | 显示全部楼层
YoshinoSakura 发表于 2024-3-8 07:21
你好,不会的,现在有多少个会直接手动管理内存的,
安卓这种甚至跑jvm的,内存管理都基本上闭上眼睛用了 ...

天天裸写mmap然后手动管理的路过
发表于 2024-3-8 20:51 | 显示全部楼层
YsHaNg 发表于 2024-3-8 18:23
天天裸写mmap然后手动管理的路过

阁下恐怕不是一般码农吧
发表于 2024-3-8 20:51 | 显示全部楼层
slymitec 发表于 2024-3-8 17:18
Java会直接报一场,理论上也得有trycatch异常处理代码

要么就是异常直接一层一层抛到最外层,就闪退。 ...

每个方法都try catch吗,是否有点过了这个
发表于 2024-3-8 20:54 来自手机 | 显示全部楼层
YoshinoSakura 发表于 2024-3-8 12:51
阁下恐怕不是一般码农吧

神经病apl语言interpreter就这么管理内存的 cpython最初其实也是
发表于 2024-3-8 21:47 | 显示全部楼层
YsHaNg 发表于 2024-3-8 20:54
神经病apl语言interpreter就这么管理内存的 cpython最初其实也是

安卓还能用这些的吗,我没用过你说的那些
用这些写安卓还得自己处理内存的事情的吗
发表于 2024-3-9 00:08 | 显示全部楼层
YoshinoSakura 发表于 2024-3-8 13:47
安卓还能用这些的吗,我没用过你说的那些
用这些写安卓还得自己处理内存的事情的吗 ...
你好,不会的,现在有多少个会直接手动管理内存的
我以为这里指generic
 楼主| 发表于 2024-3-9 10:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2024-3-9 11:42 来自手机 | 显示全部楼层
slymitec 发表于 2024-3-9 10:21
自然不是每个方法都写,有很多具体代码方面解决办法

当然这个跑题了,这不是本贴的重点。 ...

对于c++语言,new失败都是直接抛异常的,判断null指针意义不大。对于大部分c++和c代码,只要内存申请失败,就应该准备dump文件,查找内存泄露了。
绝大多数c++业务代码,try catch没有太大实际意义,因为除了代码会主动申请内存,大量stl内部也会申请内存,内存申请失败并没有什么有效的补救措施。
Android通过jni调用c或c++,其实也是一样的
发表于 2024-3-9 16:13 | 显示全部楼层
slymitec 发表于 2024-3-9 10:21
自然不是每个方法都写,有很多具体代码方面解决办法

当然这个跑题了,这不是本贴的重点。 ...

确实,根据安卓的特点
估计是崩崩崩就完事了
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2024-6-10 23:24 , Processed in 0.013175 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表