优质广告供应商

广告是为了更好地支持作者创作

Android GC学到老

身在移动互联网,真是不得不服老了,旧知识过期,新知识到来都很快。说个题外话,要吃互联网这口饭,学习能力,内驱力,归纳提炼寻求本质缺一不可。那么说回正题,诱发我写此文的有三点:1. ART的GC,  2. GC对卡顿的影响, 3. 追求GC为0现实么, 4. 尝试去学习,对比,提炼。

1. ART的GC

一直到4.4, 我对GC认知应该还停留在Dalvik的GC。ART是啥,一个让性能工程师失业的玩样。哈哈, 开玩笑的。性能工程师永无止尽,就像你不会想到现在PC会有用到需要插三个电源线的显卡(我买了HTC VIVE,顺带被迫买了2K的显卡,震惊了好一阵)。说整体, 要说ART GC, 我们不妨对比一下。这里不多说话,直接简单明了上图。

这两个图应该是我这几天学习的经过简化的知识了,力求大家一看就懂,所以有疏漏大家不要介意哈。

2. GC对卡顿的影响

从原理上看,GC可以STOP THE WORLD,意思其实就是挂起正在运行的全部线程,因此可以引入卡顿问题。而在各种GC的原因中,因为没有足够空间分配内存才触发的GC_FOR_ALLOC是最为耗时的,因为它完全没有并发的能力。

从android官方对外的宣扬,Bitmap.inBitmap,ObjectPool, ViewPool这些API和设计架构,  告示大家要把图片缓存从WeakReference切换到LruCache等等,都是在时刻提醒android开发,GC对性能的影响有多么重要。

从案例上看,我们项目有遇到过用inBitmap来减少GC, 用StringBuild.delete来代替new新的StringBuild来提升APP的流畅度,效果显著。

3. 追求GC为0现实么?

不现实。但是不想追求满分的60分也就只能是不及格。非常适合用在GC性能优化上,因为GC的出现就像是APP里面的空气和水,这时人就会有惯性有偏见,直接就认为那是必须的必要的,而没有想怎么优化。举例子,大部分人觉得byte[]的申请其实没有办法优化,其实不然,参考ObjectPool定制一个BytePool,可以减少byte[]的申请和释放。

4. 尝试去学习,对比,提炼

从这几天的学习来看,总体来说,从Dalvik(<3.0)的GC到Dalvik(>3.0)的GC, 再到ART的GC, 变化极大,但是有些事情是没有变的,如GC FOR ALLOC虽然开始支持局部GC, 但依旧不能并发,其他GC,虽减少了挂起线程的次数,但是依旧要有挂起线程stop the world的时候,因此本质都是一样的,就是减少GC,减少内存占用,减少卡顿。而所谓互联网行业,要懂得通过对比,举一反三的, 寻求本质, 否则落伍和淘汰是迟早的事情。

PS: 文章中如果有不对的地方,盼望指出。相信:the truth is out there。

参考文章:

1. http://hello2mao.github.io/2015/12/11/ART_GC_VS_Dalvik_GC.html

2. http://www.jianshu.com/p/a5b4850c8540  

3. Google I/O 2014

优质广告供应商

广告是为了更好地支持作者创作

推荐阅读更多精彩内容

  • 在 Java 中,内存的分配是由程序完成的,而内存的释放则是由 Garbage Collecation(GC) 完...
    Shawn_Dut阅读 5,388评论 3 28
  • 想写一篇关于android的内存分配和回收文章的想法来源于追查一个魅族手机图片滑动卡顿问题,我们想了很多...
    昱全yuquan阅读 9,733评论 4 22
  • 优质广告供应商

    广告是为了更好地支持作者创作

  • 一.操作系统相关基础知识 1.物理内存、虚拟内存、逻辑地址与交换空间 物理内存(RAM):加载到内存地址寄存器中的...
    Geeks_Liu阅读 8,445评论 6 30
  • 在学习Android之前,都学习了Java,对于Java虚拟机都或多或少的进行了了解。那么Android中的虚拟机...
    Ruheng阅读 12,288评论 12 68
  • 文/蓝晓乐 有没有一种感觉,越长大时间过得越快,上小学的时候总感觉日子特别难熬,每天都有做不完的作业,背不完的古诗...
    蓝晓乐阅读 323评论 0 0
  • 读经路得记1:22-2:7经文路得记2:2 摩押女子路得对拿俄米说:“容我往田间去,我蒙谁的恩,就在谁的身后拾取麦...
    君自尔出阅读 150评论 0 0
  • 优质广告供应商

    广告是为了更好地支持作者创作

  • 《宋稗类钞》载:富郑公初甚欲见黄山谷,及一见,便不喜。语人曰:“将谓黄某如何?原来只是分宁一茶客。”富弼这句讥讽的...
    春水流阅读 1,870评论 0 2
  • 像走久了需要停下来休息一样,行者的世界需要洗涤,休整,再重新排列。 这事儿务必间断性地进行,频率多了跟每日例行吃饭...
    闲庄听水阅读 173评论 9 6