利用图文和代码深度解析操作系统OS内存泄漏检测实现原理与算法机制以及常见的泄露原因和解决方案。
计算机科学中,内存泄漏是一种资源泄漏。发生这种情况时,不再需要的内存未被释放,计算机程序以错误的方式管理内存分配。当对象存储在内存中但不能被运行代码无法访问时,也可能发生内存泄漏。内存泄漏的症状类似于许多其他问题,通常它只能由能够访问程序源代码的程序员来诊断。接下来和您详细说一下“什么是内存泄露和内存泄漏的原因及解决办法。”
一、什么是内存泄露
内存泄漏(存储渗漏)是用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元,直到程序结束。内存泄漏是一种很难定位和跟踪的错误。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。
什么是内存泄露,通俗的来说就是堆中的一些对象已经不会再被使用了,但垃圾收集器却无法将它们从内存中清除。
内存泄漏很严重的问题,因为它会阻塞内存资源并随着时间的推移降低系统性能。如果不进行有效的处理,最终的结果将会使应用程序耗尽内存资源,无法正常服务,导致程序崩溃,抛出java.lang.OutOfMemoryError异常。
堆内存中通常有两种类型的对象:被引用的对象和未被引用的对象。被引用的对象是应用程序中仍然具有活跃的引用,而未被引用的对象则没有任何活跃的引用。
垃圾收集器会回收那些未被引用的对象,但不会回收那些还在被引用的对象。这也是内存泄露发生的源头。
内存泄露往往有以下表象:
当应用程序长时间连续运行时,性能严重下降;
抛出OutOfMemo