app冷启动: 当应用启动时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用, 这个启动方式就叫做冷启动(后台不存在该应用进程)。
app热启动: 当应用已经被打开, 但是被按下返回键、Home键等按键时回到桌面或者是其他程序的时候,再重新打开该app时, 这个方式叫做热启动(后台已经存在该应用进程)。
GC
Gabage Collection 垃圾回收,是.net中对内存管理的一种功能。垃圾回收器跟踪并回收托管内存中分配的对象,定期执行垃圾回收以回收分配给没有有效引用的对象的内存。当使用可用内存不能满足内存请求时,GC会自动进行。 在进行垃圾回收时,垃圾回收器回首先搜索内存中的托管对象,然后从托管代码中搜索被引用的对象并标记为有效,接着释放没有被标记为有效的对象并收回内存,最后整理内存将有效对象挪动到一起。
内存抖动易引起掉帧即用户使用卡顿
内存抖动的发生导致内存中短时间内生成很多对象又在短时间内马上释放,而app分配的堆内存是有限的,这样就会导致app堆内存接近溢出值时,强制GC启动,你分配的内存越多越频繁,GC的启动次数也就越多越频繁,都知道执行GC操作的时候,任何线程的任何操作都会需要暂停,等待GC操作完成之后,其他操作才能够继续运行(所以垃圾回收运行的次数越少,对性能的影响就越少),这样子就会导致UI线程暂时停止,让GC先去回收内存,但是当绘制与gc时间超过了16ms就会引起上面所说的掉帧现象。
深度性能测试
内存监控:pss均值、pss峰值、heapalloc均值、heapalloc峰值
PSS:Propotionate Set Size(比例集大小) 由于进程在共享系统中内存,为了更公平地判断各进程占用的内存,采用PSS统计量,指的是 该应用程序消耗的非共用内存+可以“归因于它”的共享内存部分/分享共享内存的进程数量。Android将按照PSS由大到小的顺序kill进程。
HeapAlloc 是Dalvik堆和本地堆分配使用的大小,它的值比Pss Total和Private Dirty大,因为进程是从Zygote中复制分裂出来的,包含了进程共享的分配部分。
流畅度监控:关注掉帧曲线
过度绘制:过度绘制这个名词就是用来描述屏幕上一个像素在单个帧中被重绘了多少次。过度绘制的页面越多越影响性能