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

内存泄漏和内存溢出的区别(内存泄漏是指什么意思)

  • 内存
  • 2024-06-01 18:58:15
  • 913

一、内存溢出和内存泄漏的区别品牌型号:华为MateBookD15
系统:Windows11

内存溢出是指程序请求内存而没有足够的内存空间来使用它。显示内存不足。例如,当您请求内存时,您得到一个整数,但它存储的数字只能存储为Long。这是内存溢出。

内存泄漏是指程序请求内存但无法释放分配的内存空间。虽然内存泄漏的危害可以忽略不计,但无论如何,内存泄漏的累积影响都是严重的。如果你有很多内存,它迟早会被占用。

内存泄漏可以分为四类。

1.频繁内存泄漏。存在内存泄漏的代码会被多次执行,每次执行都会导致内存泄漏。

2.可能会出现内存泄漏。泄漏内存的代码仅在某些情况或操下发生。频繁和偶发是相对的。在某些情况下,偶尔发生的事情可能会变得很常见。因此,测试环境和测试方法对于识别内存泄漏非常重要。

3.一次性内存泄漏。导致内存泄漏的代码仅执行一次,或者算法中的缺陷导致在任何给定时间仅泄漏一个内存块。例如,如果在类的构造函数中分配了内存,但在其析构函数中未释放内存,则内存泄漏仅发生一次。

4.隐式内存泄漏。程序在运行时不断分配内存,但直到运行结束才释放内存。严格来说,这里不存在内存泄漏,因为程序最终释放了所有请求的内存。但对于需要运行数天、数周甚至数月的服务器程序来说,如果不及时释放内存,最终可能会耗尽系统内存。因此,这种类型的内存泄漏称为隐式内存泄漏。


二、Android内存溢出和内存泄漏的区别

内存溢出是指当对象的内存使用量超过其分配的内存空间时,将抛出未处理的异常。例如,常见的内存溢出情况包括:位图太大;链接未发布;资源对象没有关闭。
如,这是一种常见的栅格对象溢出。显示像素太高或图像尺寸远大于显示时的空间尺寸,通常会进行缩放以减少内存占用。

内存泄漏

有些对象的生命周期是有限的。当他们的任务完成后,他们将被收集到垃圾桶中。如果一个对象在其生命周期即将结束时仍然被一系列引用所引用,就会导致内存泄漏。随着泄漏的累积,应用程序将耗尽内存。
例如,调用roy()后,必须清除视图树及其关联位图的垃圾。如果正在运行的后台线程继续持有对此操作的引用,则关联的内存将不会被释放,这最终将导致OutOfMemoryError。
记忆最终会导致失忆!


如,这是使用MAT工具查找内存泄漏的结果。一个例子是由于发送消息的延迟和上下文的破坏而导致的泄漏。活动结束。这就是目标。测试可以更容易地发现问题。在实际开发中,内存泄漏很难被察觉,当泄漏积累到一定程度时,就会出现OOM。