1.内存抖动:内存频繁的分配和回收,频繁的gc会导致UI卡顿,严重的时候导致out of memory error(内存超过分配的最大值)
使用adb命令查看手机给每个应用分配的内存大小:
adb shell getprop dalvik.vm.heapsize
2.垃圾回收算法
- 1.标记--清除算法 :直接回收标记的内存,不移动存活对象,导致内存不连贯,碎片化严重;但是不用移动,执行速度快,效率高;
- 2.复制算法:浪费50%的内存;
- 3.标记--压缩算法:会对存活对象移动,没有碎片;但是因为移动存活对象,有额外开销;
3.分代
java虚拟机的堆内存分为新生代和老年代及永久代;
新生代又分为亚当区和夏娃区;新创建的对象在亚当区,当亚当区满的时候,会转移到夏娃区;但是在夏娃区又分为两个区,当对象每经历一次gc,“年龄”都会加一,当达到阈值,就会转移到夏娃的第二区;再到达一定阈值,就会转移到老年代;
屏幕快照 2018-10-15 下午1.44.45.png
垃圾回收器是垃圾回收算法的实现;新生代和老年代回收器实现的算法是不一样的;
新生代gc :minor gc
老年代gc: magor gc
Android垃圾回收采用CMS垃圾收集器(采用标记--清除算法),与所有用户线程并发进行;
网友评论