android webview 滑动内容抖动_APP内存优化之内存抖动

谈起内存抖动,我们先复习一下JVM内存空间的情况,如下图

903895b1d62bea7cf11d7bd34169c538.png

JVM内存模型

内存抖动的原因

内存频繁的分配与回收,(分配速度大于回收速度时)最终会产生OOM。

频繁分配内存两个例子:

循环里面是有+号进行字符串拼接,可以改用StringBuffer/StringBuilder进行拼接。

WebView显示图片,WebView里面的内存问题是无解的,可以开启另一个进程展示WebView所在activity或改进算法减少耗时。

回收算法

1、标记清除算法Mark-Sweep,内存碎片多,速度快。

e97f0a165bad304a3b53aa711f71facf.png

标记清除算法Mark-Sweep

2、复制算法Copying,减少内存碎片,牺牲了内存空间,速度较慢。

f863f34d3a01f20cc6b153428d2783bb.png

复制算法Copying

3、标记压缩算法Mark-Compact,减少内存碎片,折中方式。

68c926e170bd3a5760d2428d1c721148.png

标记压缩算法Mark-Compact

4、分代收集算法,Android使用的算法。

5f47d575d2129bb61c7f1619d6239b54.png

分代收集

注意:Permanent和垃圾回收没什么关系,主要用来存放类,方法信息,也能作为常量池使用,不同VM不同实现,有些没这个区。

7fe0bb669b3a5b67643680d5b3cf93d6.png

GC收集器

以下收集器不是单独使用,而是混合使用,新生代与老年代采用的收集器是不一样的。

a、Serial串行收集器

abef343d9fd13be18eeab6070f291cba.png

Serial串行收集器

b、ParNew 收集器

3147fdbbb05265398ac02f5443521866.png

ParNew 收集器

c、Parallel Scavenge收集器

6613fc2bbe0e1fcc8adb14a6a6814d7b.png

Parallel Scavenge收集器

吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)。

d、Serial Old收集器

26a1c4d242ea086246f021f80cde9a1b.png

Serial Old收集器

e、Parallel Old收集器

fb0b448842380c71428d083051ab5f3d.png

Parallel Old收集器

f、CMS 收集器,老年代Android使用的是这种机制。

46017a6859929c6fa4e5e989f7cf1289.png

CMS 收集器

CMS采用"标记-清理"算法实现以获取最短回收停顿时间为目标的收集器,增加了CPU的负担

初始标记:标记一下GC Roots能直接关联到的对象

并发标记:进行GC Roots Tracing 的过程

重新标记:是为了修正并发标记期间因用户程序继续运行而导致标记产品变动的那一部分对象的标记记录

并发清除:清除不能到达GC Roots的对象

重置线程:更新之前使用过的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值