内存优化总结

内存问题

  1. 内存抖动:导致GC导致卡顿
  2. 内存泄漏:导致频繁GC,可用内存减少
  1. 内存溢出:导致OOM

工具排查

  1. AS中的Profiler查看内存情况,是否锯齿状,是否持续上升
  2. MAT排查
  1. LeakCanary排查泄漏

问题解决方案

抖动

  1. 禁止string拼接
  2. 使用优化后的数据结构,SparseMap,ArrayMap等
  1. 使用资源池复用
  2. 减少不必要的对象创建
  1. 在c++层进行虚拟机的空闲内存大小配置,需要兼容各个版本和ROM

泄漏

主要通过工具排查问题

也可以进行容灾处理,对GC进行监控或者对内存的触顶率进行监控,达到要求后,可在Activity的onDestory中对Activity对象空壳处理,循环view树进行图片等回收,避免内存持续增长

OOM

  1. 正确选择数据结构
  2. 避免枚举,枚举本身就占了24个字节
  1. Bitmap使用正确的分辨率
  2. 不用帧动画
  1. 使用webp
  2. 使用NDK,内存大户交给C++处理
  1. 代码中注意主动去销毁资源
  2. 谨慎使用多进程、第三方框架
  1. 不同机型可适当移除一些业务
  2. 避免大内存对象,比如在SP中存入大对象会导致该对象一直存在内存中

监控

  1. 美团的Probe,OOM监控
  2. Debug.startAllocCounting实验环境的GC监控

Android内存优化—内存优化总结的更多相关文章

  1. Android性能优化之巧用软引用与弱引用优化内存使用

    前言: 从事Android开发的同学都知道移动设备的内存使用是非常敏感的话题,今天我们来看下如何使用软引用与弱引用来优化内存使用.下面来理解几个概念. 1.StrongReference(强引用) 强 ...

  2. Android 内存管理之优化建议

    OOM(OutOfMemory)转:http://hukai.me/android-performance-oom/ 前面我们提到过使用getMemoryClass()的方法可以得到Dalvik He ...

  3. Android 性能优化——内存篇

    一.android官方一些内存方面的内存tips 1.避免创建不必要的对象. 如尽量避免字符串的加号拼接,可以使用StringBuilder来拼接. 如果需要TextView设置多个字符串片段,可以使 ...

  4. Android性能优化-内存泄漏的8个Case

    1为什么要做性能优化? 手机性能越来越好,不用纠结这些细微的性能? Android每一个应用都是运行的独立的Dalivk虚拟机,根据不同的手机分配的可用内存可能只有(32M.64M等),所谓的4GB. ...

  5. Android性能优化-内存优化

    原文链接 Manage Your App’s Memory 前言 在任何软件开发环境中,RAM都是比较珍贵的资源.在移动操作系统上更是这样,因为它们的物理内存通常受限.尽管在ART和Dalvik虚拟机 ...

  6. 关于android性能,内存优化

    转:http://www.starming.com/index.php?action=plugin&v=wave&tpl=union&ac=viewgrouppost& ...

  7. 谷歌发布 Android 8.1 首个开发者预览版,优化内存效率

    今晨,谷歌推出了 Android 8.1 首个开发者预览版,此次升级涵盖了针对多个功能的提升优化,其中包含对 Android Go (设备运行内存小于等于 1 GB)和加速设备上对机器学习的全新神经网 ...

  8. [Android 性能优化系列]内存之基础篇--Android怎样管理内存

    大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地 ...

  9. Android 性能优化 ---- 内存优化

    1.Android内存管理机制 1.1 Java内存分配模型 先上一张JVM将内存划分区域的图 程序计数器:存储当前线程执行目标方法执行到第几行. 栈内存:Java栈中存放的是一个个栈帧,每个栈帧对应 ...

  10. Android系统Bitmap内存分配原理与优化

    一.前言 笔者最近致力于vivo游戏中心稳定性维护,在分析线上异常时,发现有相当一部分是由OutOfMemory引起.谈及OOM,我们一般都会想到内存泄漏,其实,往往还有另外一个因素--图片,如果对图 ...

随机推荐

  1. [转帖]用实力诠释细节!“Java性能调优六大工具”之JDK命令行工具

    https://www.zhihu.com/people/javajia-gou-ji-zhu-44/posts   JDK命令行工具 在JDK的开发包中,除了大家熟知的java.exe和javac. ...

  2. vue中$once的使用

    $once 可以给组件实例绑定一个自定义事件,但该事件只能被触发一次,触发之后随即被移除 $once的简单使用 <template> <div> <button @cli ...

  3. echarts 设置legend样式

    设置legend样式 legend: { x: 'center', data: ['班车', '包车'], icon: "circle", // 这个字段控制形状 类型包括 cir ...

  4. docker上部署启动RabbitMQ

    在docker上部署启动RabbitMQ及使用 一.docker上部署启动RabbitMQ 1.查询rabbitmq镜像 docker search rabbitmq:management 2.拉取r ...

  5. 【2】超级详细Python-matplotlib画图,手把手教你画图!(线条颜色、大小、线形、标签)

    相关文章: 全网最详细超长python学习笔记.14章节知识点很全面十分详细,快速入门,只用看这一篇你就学会了! [1]windows系统如何安装后缀是whl的python库 [2]超级详细Pytho ...

  6. 本地Nuget包管理

    nuget.org有时候会抽风,VS无法自动下载程序包.这时,我们可以配置本地nuget包搜索路径. 1 下载Nuget package 以anycad rapid sdk为例,可以先从百度云盘下载最 ...

  7. 安装kali linux操作系统(转) - 初学者系列 - 学习者系列文章

    前段时间想到操作系统安全问题,所以对操作系统的防火墙和安全软件都进行了安装.然后,涉及到Linux系统的安全测试问题,所以找到了Linux系统里的安全测试的版本Kali Linux系统.本文仅对该系统 ...

  8. React的组件通信与状态管理

    目录 1. 组件通讯-概念 1.组件的特点 2.知道组件通讯意义 总结: 2. 组件通讯-props 基本使用 1.传递数据和接收数据的过程 2.函数组件使用 props 3.类组件使用 props ...

  9. 会话跟踪技术之SESSION

    会话跟踪技术之SESSION 一般来说,登录信息既可以存储在session中,也可以存储在cookie中,他们之间的差别在于session可以方便的存取多种数据类型,而cookie只支持字符串类型,同 ...

  10. delphi 调试 原来可以这样 复制,不用点开 才能复制 对象的值