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

内存泄漏与内存溢出总结(内存泄漏内存溢出区别)

  • 内存
  • 2024-06-04 09:53:19
  • 7134

一、内存溢出和内存泄漏有什么区别内存泄漏是指分配的内存无法再被重用
内存泄漏是指程序由于疏忽或错误而未能释放不再使用的内存的情况。由于设计错误而造成的损失是失去对这一段内存的控制,导致内存丢失。
一般来说,我们常说的内存泄漏指的是堆内存泄漏。堆内存(HeapMemory)是指程序从堆中分配的内存(任意大小(内存块的大小可以在程序执行时确定));应显示使用后释放的内存。应用一般是malloc;重新分配使用新功能和其他功能后;程序必须负责自由调用或擦除内存块。它会说该内存已泄漏。
当程序所需的内存超过系统分配的内存量时,就会发生内存溢出。
内存溢出是指访问某个字段中超出其要求的数据而不进行处理而导致的数据溢出问题。
二、内存溢出和内存泄漏的区别品牌型号:华为MateBookD15
系统:Windows11

内存溢出是指程序使用内存时,没有足够的内存空间可以使用,出现outofmemory;例如,当请求Integer内存时,但是里面存储了一个只能存储长度的数字,这就是内存溢出。

内存泄漏是指程序使用内存后,无法释放所分配的内存空间。内存泄漏的危害可以忽略不计,但是内存泄漏累积的结果是严重的大量内存,迟早会被占领的。

内存泄漏可以分为4类:

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

2.偶尔会出现内存泄漏。导致内存泄漏的代码只会在某些条件或操作下发生。频繁和偶发是相对的。在某些情况下,偶尔的事情可能会成为常态。所以测试环境和测试方法对于检测内存泄漏很重要。

3.一次内存泄漏。导致内存泄漏的代码只会执行一次,或者由于算法缺陷,总会有且只有一个泄漏的内存块。例如,如果在类的构造函数中分配了内存,但在析构函数中没有释放内存,则内存泄漏只会发生一次。

4.隐式内存泄漏。程序在运行时不断分配内存,但在运行结束之前不会释放内存。严格来说,这里不存在内存泄漏,因为程序最终会释放所有请求的内存。但对于需要运行数天、数周或数月的服务器程序来说,未能及时释放内存也可能导致最终耗尽所有系统内存。因此,我们将这种类型的内存泄漏称为隐式内存泄漏。