什么是内存泄漏、检测及内存溢出

1、什么是内存泄漏(memory leak)? 

应用程序中已动态分配的堆内存由于某种原因(比如没有任何指针指向申请的内存)导致程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。内存泄漏不是指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制。

2、如何检测内存泄露?

①:良好的编码习惯。尽量在涉及内存的程序段,检测出内存泄露。当程式稳定之后,在来检测内存泄露时,无疑增加了排除的困难和复杂度。使用了内存分配的函数,使用完毕将其相应的函数释放掉。

②:将分配的内存的指针以链表的形式自行管理,使用完毕之后从链表中删除,程序结束时可检查改链表。

③:Boost 中的smart pointer。

④:使用一些常见的工具插件检测,如ccmalloc、Dmalloc、Leaky等等。

3、什么是内存溢出(out of memory)?

系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于系统能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭程序,重启电脑或者程序后释放掉一部分内存又可以正常运行该软件。

内存泄漏最终导致的结果是内存溢出。

内存泄漏与内存溢出更详细的解释:https://blog.csdn.net/ruiruihahaha/article/details/70270574

你可能感兴趣的:(内存泄漏,jvm,内存管理,java)