slymitec 发表于 2024-3-8 10:57

dcl2009 发表于 2024-3-8 11:04

很久以前用过,那时候内存普遍很小,效果就是闪退+卡顿,可以运行的APP变多,弊大于利

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

所以现在一般没这么多花花绕绕,直接大内存,最多开内存压缩

slymitec 发表于 2024-3-8 11:06

xy. 发表于 2024-3-8 11:09

看一下 /proc/swaps, 你的 android 设备使用的 swap 不一定是闪存, 可能是 zram

slymitec 发表于 2024-3-8 11:11

xy. 发表于 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

dcl2009 发表于 2024-3-8 11:14

slymitec 发表于 2024-3-8 11:06
我总觉得,内存不够造成卡顿的原因,是频繁动用虚拟内存页面文件。

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

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

APP不管这个参数

这个参数的意义是告诉操作系统,什么时候清理APP,什么时候kill掉APP

slymitec 发表于 2024-3-8 11:16

slymitec 发表于 2024-3-8 11:19

YoshinoSakura 发表于 2024-3-8 11:54

会OOM啊,直接崩啊
这不是很显而易见的事情么

slymitec 发表于 2024-3-8 12:00

labyrin 发表于 2024-3-8 12:31

会变卡而已

slymitec 发表于 2024-3-8 12:36

labyrin 发表于 2024-3-8 12:44

slymitec 发表于 2024-3-8 12:36
根据本帖的上下文 是因为什么具体原因卡呢

app其实也想省点内存,但是这是要权衡的,一般多占用的都是用来做预加载和缓存为主,不够了就少缓存点,代价就是要等实时加载所以会变卡,当然比如你限制A的内存,那省下来的内存给b用,b是受益的

slymitec 发表于 2024-3-8 12:50

JormunChan 发表于 2024-3-8 13:01

Android app卡不卡并不是看虚拟内存的页变动,你说的只是其中一个可能的因素。
Android app卡有很多方面的原因,比如ui绘制卡顿、cpu处理卡顿、内存抖动导致的卡顿、网络请求过慢、某个rom魔改底层代码、还有你提到的io卡顿等等也是有的。
常规情况下,界面绘制信号是16ms,因此只要你随便一个部分处理时间超过了16ms,就会发生丢帧,也就是卡顿。
像开发者就有很多工具去检测,比如systrace等,然而实际上用户上报的卡顿场景非常不容易复现而且很复杂,并不能全部都处理掉,都是尽可能的处理。
这种涉及到app优化的部分都是面试可以聊2个小时都聊不完的那种。

slymitec 发表于 2024-3-8 13:04

BH1PXK 发表于 2024-3-8 13:10

安卓手机内存都到16G 了 就跑一个微信 ,比电脑的内存都大了.

YoshinoSakura 发表于 2024-3-8 15:21

slymitec 发表于 2024-3-8 12:00
具体程序代码设计的, 相当于申请堆内存失败返回null,程序员总得显式处理这个事情 ...

你好,不会的,现在有多少个会直接手动管理内存的,
安卓这种甚至跑jvm的,内存管理都基本上闭上眼睛用了。

archxm 发表于 2024-3-8 15:28

国产 app 可不是吃素的,
一旦发现你做了这种限制,绝对给你使脸色看

slymitec 发表于 2024-3-8 17:18

YsHaNg 发表于 2024-3-8 18:23

YoshinoSakura 发表于 2024-3-8 07:21
你好,不会的,现在有多少个会直接手动管理内存的,
安卓这种甚至跑jvm的,内存管理都基本上闭上眼睛用了 ...

天天裸写mmap然后手动管理的路过

YoshinoSakura 发表于 2024-3-8 20:51

YsHaNg 发表于 2024-3-8 18:23
天天裸写mmap然后手动管理的路过

阁下恐怕不是一般码农吧

YoshinoSakura 发表于 2024-3-8 20:51

slymitec 发表于 2024-3-8 17:18
Java会直接报一场,理论上也得有trycatch异常处理代码

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

每个方法都try catch吗,是否有点过了这个

YsHaNg 发表于 2024-3-8 20:54

YoshinoSakura 发表于 2024-3-8 12:51
阁下恐怕不是一般码农吧

神经病apl语言interpreter就这么管理内存的 cpython最初其实也是

YoshinoSakura 发表于 2024-3-8 21:47

YsHaNg 发表于 2024-3-8 20:54
神经病apl语言interpreter就这么管理内存的 cpython最初其实也是

安卓还能用这些的吗,我没用过你说的那些
用这些写安卓还得自己处理内存的事情的吗

YsHaNg 发表于 2024-3-9 00:08

YoshinoSakura 发表于 2024-3-8 13:47
安卓还能用这些的吗,我没用过你说的那些
用这些写安卓还得自己处理内存的事情的吗 ...

你好,不会的,现在有多少个会直接手动管理内存的 我以为这里指generic

slymitec 发表于 2024-3-9 10:21

download007 发表于 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++,其实也是一样的

YoshinoSakura 发表于 2024-3-9 16:13

slymitec 发表于 2024-3-9 10:21
自然不是每个方法都写,有很多具体代码方面解决办法

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

确实,根据安卓的特点
估计是崩崩崩就完事了
页: [1]
查看完整版本: 如果安卓配置为针对某个app限制内存和虚拟内存占用量,会发生什么情况?