专栏名称: 复利大王
分享和推送Java/Android方向的技术和文章,让你成为这方面的大牛,让你每天都成长一点。同时,我们也会邀请BAT的大牛分享原创!
目录
相关文章推荐
51好读  ›  专栏  ›  复利大王

LeakCanary直面项目中的内存泄露

复利大王  · 公众号  · android  · 2017-01-13 10:30

正文

请到「今天看啥」查看全文


好了,在学习如何使用LeakCanary之前,我们先对内存泄露与内存溢出做出概念性的理解。原因是大部分人对这两个的区别总是朦朦胧胧分不清楚。


▲概念要点 (什么是内存泄露,内存溢出)

  • 内存泄露(Memory Leak)指你用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态内存泄露和硬件没有关系,它是由软件设计缺陷引起的。


  • 内存溢出(Memory Overflow)指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory。比如你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,就是溢出


▲内存泄露、溢出的异同 (两者之间的区别)

相同点:都会导致应用程序运行出现问题,性能下降或挂起。


不同点:

1) 内存泄露是导致内存溢出的原因之一;内存泄露积累起来将导致内存溢出。
2)内存泄露可以通过完善代码来避免;内存溢出可以通过调整配置来减少发生频率,但无法彻底避免。


▲Android中会造成内存泄露的情景无外乎两种


  • 全局进程(process-global)的static变量。这个无视应用的状态,持有Activity的强引用的怪物。

  • 活在Activity生命周期之外的线程。没有清空对Activity的强引用。








请到「今天看啥」查看全文