内存泄漏是编写代码时最不想要遇到的情况之一,为什么?

内存泄漏是编写代码时最不想要遇到的情况之一,为什么?,第1张

内存泄漏是在编写代码的时候最不想要遇到的情况之一,一旦是遇到了之后就需要停止已经运行的程序或程序根本就没有运行起来,找到出错的地方,进行修改,因为内存泄露本身是一种给数据分配了一个空间,但在结尾没有回收的现象,一旦是程序运行到了最后,就会提醒你出错,这里说一下内存泄露产生的几种原因。

一、单利静态造成

单例静态的未回收是内存泄露产生几种原因最常见的一种,因为单例静态自身的使用周期与应用的周期一样长,在漫长的使用过程之中,单例还占据着对象引用开辟出来的空间,会造成最后程序结尾的内存泄露。 就好比是我借了你的钱,你钱的一部分到了我的手上,并承诺规定时间内归还,但你忘了这件事情,那么就不还了,等着资金链断了才最终想起来这件事情。

二、内部类持有外部类

如果是一个外部类生成的一个实例对象,一直被内部类数据在使用着,到了最后哪个外部类已经不再使用了,但是内部类还是一直在使用,并没有对这段内存进行释放,所以这个外部类不回被回收,这也是产生内存泄露的一个原因。

三、库和协议的连接

当我们在进行数据库的连接,或者网络连接的过程之中,都需要用到数据进行传输,这个数据的使用,一直随着连接的关闭而停止,但是一直到最后,这种连接都没有关闭,就会造成大量的对象没有办法回收,从而造成了内存的泄露,已经应用的崩溃卡死。

四、变量不合理的定义域

在变量使用过程之中,要对变量的定义域进行约束,如果是变量定义域在使用的过程之中本身的范围超过了所需要的范围,并且没有置空,则就会造成内存泄露的出现。

内存泄露定义

进程中某些对象没有使用价值了,但是他们却可以直接或间接的引用gc roots导致无法被gc回收。当不用的对象占据着内存空间时,使得实际可使用的内存变小,形象的说法就是发生内存泄露了。

危害

1.频繁GC:安卓系统分配给单个应用的内存资源都是有限的 国内存泄露导致其他组件可用的内存变少后,一方面会使得gc的频率加剧,再发生gc的时候,所有进程都必须等待 gc的频率越高,用户越容易感到应用卡顿。另一方面内存变小,可能使得系统额外分配给该app一些内存,而影响整个系统的运行情况。

2.运行崩溃问题:一旦内存不足以分配某些需要的内存,将会导致崩溃,造成体验差。偶尔也会遇到一些机型出现OOM的问题,大多数情况下和内存泄露有关。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/sjk/10818631.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存