内存抖动、内存泄露、内存溢出

326 篇文章 1 订阅
104 篇文章 2 订阅
  • 内存抖动:在短时间内有大量对象被创建或者被回收的现象,主要原因是频繁在循环里创建对象。

    在程序里,每创建一个对象,就会有一块内存分配给它;每分配一块内存,程序的可用内存也就少一块;当程序被占用的内存达到一定临界程度,GC 也就是垃圾回收器(Garbage Collector)就会出动,来释放掉一部分不再被使用的内存。Android 里的 View.onDraw() 方法在每次需要重绘的时候都会被调用,这就意味着,如果你在 onDraw() 里写了创建对象的代码,在界面频繁刷新的时候,你就也会频繁创建出一大批只被使用一次的对象,这就会导致内存占用的迅速攀升;然后很快,可能就会触发 GC 的回收动作,也就是这些被你创建出来的对象被 GC 回收掉垃圾内存太多了就被清理掉,这是 Java 的工作机制,这不是问题。问题在于,频繁创建这些对象会造成内存不断地攀升,在刚回收了之后又迅速涨起来,那么紧接着就是又一次的回收,对吧?这么往复下来,最终导致一种循环,一种在短时间内反复地发生内存增长和回收的循环

    这种循环往复的状态就像是水波纹的颤动一样,它的专业称呼叫做 Memory Churn,Android 的官方文档里把它翻译做了内存抖动。

示例:通过Android Studio自带工具momory monitor 发现 出现内存忽上忽下 形成针尖状的情况.

 

  • 内存泄露:申请内存空间后,在不再使用时没有释放,造成该内存空间一直被占据,不能再次循环利用。当大量对象不能被回收时,也会导致OOM。
     
  • 内存溢出:out of memory,简称OOM。也就是内存空间已经被用完,当你使用代码去new 新对象时,由于没有空间了,无法创建代码,简单理解就是电脑硬盘空间满了,无法存储更多内容。

部分资料源自互联网,如有侵权请联系作者。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值