当前位置:首页 > 内存 > 正文

内存泄漏是什么引起的(安卓内存泄漏和内存溢出)

  • 内存
  • 2024-06-09 07:27:36
  • 9483

一、activity栈管理为什么会导致内存泄漏Java内存泄漏的主要原因是长寿命对象持有对短寿命对象的引用
虽然不再需要短寿命对象,但长寿命对象持有对它们的引用
导致短寿命对象存活的对象、生命周期对象无法被回收,这是JavaHashMap、Vector等内存泄漏的主要原因。使用最有可能导致内存泄漏
因为这些静态变量的生命周期与应用一致
它们引用的所有对象都无法释放,导致OOM
2.当对象在集合属性修改时remove()方法不起作用
这会导致OOM
3
对象释放时未能​​删除监听器也会增加内存泄漏的可能性例如数据库连接、网络连接、io连接,除非它们显式调用close()方法关闭连接。/>,它们不会被GC自动回收。构成OOM
5的条件也是单例模式被初始化的原因之一,单例对象将被用作静态变量。该方法存在于整个JVM生命周期中
如果单例对象持有外部对象的引用,则外部对象将不会被正常回收。jvm
导致内存泄漏


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

内存泄漏是编写代码时最不想遇到的情况之一。一旦遇到,需要停止程序运行或者程序根本不运行,找到错误并更改,因为发生了内存泄漏。就是数据分配了空间但最终没有被回收的现象。一旦程序到达末尾,它会提醒您有错误。以下是造成内存泄漏的几个原因。

1.单例静态数据引起

无法回收单例静态数据是内存泄漏最常见的原因,因为单例静态数据本身的生命周期与应用程序的生命周期不同。循环也是一样的,在漫长的使用过程中,单例仍然占用着对象引用释放的空间,这会导致程序结束时出现内存泄漏。就好像我借了你的钱,你的一部分钱到了我手里,我答应在规定的时间内归还,但如果你忘记了,你就不会归还,要等到资金链断裂才可以归还。最后想一想。

2.内部类包含外部类

如果是外部类生成实例对象,则已经被内部类的数据使用,不再使用外部类,而是内部类仍然在使用,这块内存没有被释放,所以外部类不会被回收,这也是内存泄漏的一个原因。

3.连接库和协议

当我们连接数据库或者连接网络时,我们需要使用数据进行传输。在连接关闭的同时继续使用这些数据,直到结束,连接没有关闭,这会防止大量对象被回收,导致内存泄漏和应用程序崩溃和冻结。

4.不合理的变量域

在使用变量的过程中,如果在使用过程中使用了变量域本身,则应该对变量域进行限制,如果范围超出了要求的范围而不留空,就会发生内存泄漏。