内存泄漏和内存溢出
一、内存泄漏(memory leak)
1:内存泄漏是指程序中已动态分配的堆内存由于某种原因未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统奔溃等严重后果。
2:一次内训泄漏似乎不会有大的影响,但内存泄漏后堆积的结果就是内存溢出。
3:内存泄漏具有隐蔽性,积累性的特征,比其他内存非法访问错误更难检测。这是因为内存泄漏产生的原因是内存块未被释放,属于遗漏型缺陷而不是过错型缺陷。此外,内存泄漏不会直接产生可观察的错误,而是逐渐积累,降低系统的整体性性能。
4:如何有效的进行内存分配和释放,防止内存泄漏,是软件开发人员的关键问题,比如一个服务器应用软件要长时间服务多个客户端,若存在内存泄漏,则会逐渐堆积,导致一系列严重后果。
二、内存溢出(OutOfMemory)
指程序在申请内存时,没有足够的内存供申请者使用,导致内存不够用,报错OOM,即出现内存溢出的错误。
三、内存泄漏和内存溢出的联系
1:内存泄漏的堆积最终会导致内存溢出。
2:内存溢出就是你要的内存空间超过了系统实际分配给你的空间,此时系统相当于没法满足你的需求,就会报内存溢出的错误
3:内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还,结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。