内存优化

内存问题

内存抖动:通过工具可以发现是锯齿状 , 可导致GC频繁,GC频繁会导致程序卡顿。
内存泄漏:可用内存减少,导致内存多次回收,频繁GC会导致程序卡顿。
内存溢出:OOM, 程序异常。

工具

MemoryProfiler
实时图表反应内存的使用情况
识别内存泄漏,抖动

Memory Analyzer (MAT)

LeakCanary

Android 内存管理机制

   Java内存管理机制
   Android内存管理机制

Java内存分配

将一大块内存划分为好几个部分
方法区 (类,静态变量...) :所有线程共享
虚拟机栈(局部变量..) 为Java方法服务,都是一些引用
本地方法栈:为native方法服务。
堆(内存中最大的区域):所有线程共享,我们对象的分配实际上都是堆上内存的分配。 经常说的内存泄漏就是发生在堆内存当中的。
程序计数器:.... 有这么个东西,来记录执行当前方法执行到了第几行。

虚拟机栈中应用 都是指向堆中真正创建的对象

Java内存回收算法

  • 标记-清除算法
      标记出所有需要被回收的对象
      统一将回收所有被标记的对象。
    缺点:效率不高 , 会出现大量内存碎片,这些碎片不可被用。
  • 复制算法
    实现简单,运行高效浪费一半内存
  • 标记-整理算法
    避免了标记清楚算法出现的内存空洞
    避免了浪费一半内存
  • 分代收集算法
    结合多种手机算法的优势
    新生代存活率低采用复制算法
    老年代存活率高,采用标记

Android内存管理机制

内存弹性分配,分配值和最大值受设备影响
OOM场景: 内存真正不足(app本身已经达到分配的内存值),可用内存不足(即使系统回收其他的进程也不足以) 就会保出 OutOfMemory

Dalvik 和Art区别
Dalvik仅一种回收算法,出厂就已经确定了
Art是可以在运行期选择。可以在不同的情况下选择不同的垃圾回收算法。

Low Memory Killer
针对所有进程

内存抖动

   内存频繁回收导致内存不稳定,使用工具查看就是锯齿状
   会导致卡顿,严重会导致OOM

-频繁创建对象,导致内存不足或碎片 (不连续)
-不连续的内存片无法被分配,导致OOM

 解决方案:

   使用Memory Profiler初步排查 Profiler -> Record 基本可以找到出现问题的位置。多半出现在循环或者多次调用的地方。

内存泄漏:

   内存中存在没有使用过的对象
   表现:出现内存抖动,可用内存变少。
   危害: 内存不足,GC频繁,OOM

  解决方案:

   使用Memory Profiler 初步检查
   使用MAT 结合代码确定位置

MAT工具使用 (32:00)

ARTHook检测不合理图片

Bitmap内存模型

获取Bitmap占用内存
  getByteCount(); 返回Bitmap自身所占的内存

因为图片对于内存优化至关重要,图片宽高大于控件宽高
解决这个问题的方案可以有 继承ImageView,重写onDraw()方法计算控件大小,再计算填入控件的Bitmap的大小,如果超出一定比例就要做一些事情,压缩或者... . 但是 不好用吧。

... ARTHook - epic 库 ...

(线上内存监控方案)
.... 算了吧

内存优化技巧总结

   优化大方向
   内存泄漏
   内存抖动
   Bitmap

内存优化的细节:

   使用优化过的SparseArray
   谨慎使用SharedPreference
   谨慎使用外部库
   合理设计架构

Q: 项目内存优化的过程是怎样做的

   分析现状,确认问题
   针对性解决
   效率提升 (无侵入性,使用些工具类)

Q:如何检测不合理的地方

    ARTHook
    以及与其他方案的区别

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343