android性能优化和内存优化 android弱引用有哪些( 二 )


缺点:效率低 , 其次会产生大量的不连续的内存碎片 , 导致提前触发另一次垃圾收集动作 。
2.2.2 复制回收算法复制回收算法是将可用内存按容量分成大小相等的两块 , 每次只使用其中的一块 , 当这块内存使用完了 , 就将存活的对象复制到另一块内存上去 , 然后把使用过的内存空间一次清理掉 , 这样使得每都次都是对其中一块内存进行回收 , 内存分配时不用考虑内存碎片等复杂情况 。
缺点:可使用内存降为原来的一半 。
2.2.3 标记整理法标记-整理算法在标记-清除算法的基础上做了改进 , 标记阶段将可回收的对象标记出来 , 标记完成后不是直接对可回收的对象进行清理 , 而是让所有存活的对象都向一端移动 , 在移动的过程中清理掉可回收的对象 。
优点:相比于标记清除法来说 , 标记整理法不会大量产生不连续内存碎片问题 。
缺点:如果是在对象存活率较高的情况下会执行较多的复制操作 , 效率将会降低很多 , 而在存活率较低的情况下 , 效率会大大提高 。
2.2.4 分代收集回收算法当前商业虚拟机都是采用的是分代收集算法 , 根据对象存活的周期不同将内存划分为几块 , 一般是将java堆分为年轻代 , 老年代和永久代 。然后根据各个年代的特点来采取不同收集算法 , 年轻代存活率较低 , 采用复制回收算法 , 老年代对象存活率较高 , 采用标记清除法或者是标记整理法来进行回收 。
3、内存问题表现形式3.1 内存抖动内存波动图呈锯齿状 , gc频繁导致卡顿 。
3.2 内存泄漏内存泄露简单来说就是系统分配出去的内存由于某种原因导致没法释放 , 内存会越来越小 , 最终导致oom 。
3.3 内存溢出即OOM , OOM时会导致程序异常 。Android设备出厂以后 , java虚拟机对单个应用的最大内存分配就确定下来了 , 超出这个值就会OOM 。
4、内存优化常用工具4.1 Memory ProfilerMemory Profiler是Android studio自带的工具 , 实时图表形式展示应用内存使用的情况 , 可以用来识别内存泄露 , 抖动等
注意:如果在控制台中没有找到Profiler , 可View —–> Tool Windows —> Profiler 进行打开
优点:方便直观 , 便于线下使用
4.2 Memory Analyzer(MAT)1、强大的java heap分析工具 , 查找内存泄露及内存占用
2、生成整体报告 , 便于分析问题
3、可以在线下深入使用
MAT使用:
MAT下载地址:

推荐阅读