开发者社区> 技术小甜> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

内存泄露

简介:
+关注继续查看

一般我们常说的内存泄露是指堆内存的泄露,堆内存是指程序从堆中分配的,大小任意的(内存大小可以在程序运行期间决定),使用完之后必须显式的释放。应用程序一般使用malloc,realloc,new等从堆内存中分配得到一块内存,使用完时候,程序必须负责相应的free,和delete释放该内存,否则,这块内存就不能被再次使用,我们就说这块内存被泄露了。

   广义的说,内存泄露不仅仅包含堆内存的泄露,还包括系统资源的泄露(resource leak),比如核心态HANDLE,GDI,Object,SOCKET,Interface等,从根本上说这些由操作系统分配的对象也消耗内存,如果这些对象发生泄露最终也会导致内存泄露。而且,某些对象消耗的是核心态的内存,这些对象严重泄漏会导致整个操作系统的不稳定。相比之下,系统资源的泄露比堆内存的泄露更为严重。

  内存泄露的放生方式  :  主要分为4类

1、常发性内存泄露。发生内存泄露的代码会被多次执行到,每次执行都会导致一块内存泄露。

2、偶发性内存泄露。发生内存泄露的代码只有在某些特定的环境或是操作过程中才会发生。

3、一次性内存泄露。发生内存泄露的代码只会被执行一次,或者由于算法的缺陷,导致总会有一块仅且一块内存发生泄漏。

4、隐式内存泄露。程序在运行过程中不断地分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄露,因为程序最终会释放所有申请的内存。但是对于一个服务器程序,需要运行几天,几周,甚至几个月,不及时的释放掉内存也可能导致最终耗尽系统左右的内存。所以我们称这种内存泄露为隐式内存泄露。

  从用户的角度来讲,内存泄露本身不会有什么危害,作为一般的用户,根本感觉不到内存泄露的存在。真正危害的是内存泄露的堆积,这最终会耗尽系统的所有内存。从这个角度讲,一次性内存泄露并没有什么危害,因为他不会堆积,而隐式的内训泄露危害最大,因为较之常发性和偶发性的内训泄露,它更难被检测到。

  内存泄露的检测

 检测内存泄露关键是要截获内存分配,内存释放的函数的调用。跟踪每一块内存的生命周期。比如,每当我们分配一块内存后,就把他的指针加入到一个全局的list中,每当释放一块内存,再把它的指针从list中删除。这样当程序结束的时候,list中剩余的指针就是指向那些没有被释放的内存。








本文转自NewPanderKing51CTO博客,原文链接:http://www.cnblogs.com/newpanderking/p/3826732.html ,如需转载请自行联系原作者





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用MAT分析内存泄露
使用MAT分析内存泄露 对于大型服务端应用程序来说,有些内存泄露问题很难在测试阶段发现,此时就需要分析JVM Heap Dump文件来找出问题。随着单机内存越来越大,应用heap也开得越来越大,动辄十几G的Dump也不足为奇了。
1493 0
Js内存泄露问题总结
最近接受了一个Js职位的面试,问了很多Js的高级特性,才发现长时间使用已知的特性进行开发而忽略了对这门语言循序渐进的理解,包括Java我想也是一样,偶尔在Sun官方看到JDK6.0列举出来的new features才发现很多东西是自己并不知道或者遗忘了的。
817 0
内存跟踪,内存泄露,内存
这个坑其实很大很大。。。。。。 虽然这名字很长,但其实就是一码事,试问你做内存跟踪不是为了看泄露?试问你看到了泄露和碎片不回去优化?哈哈 理论知识咱不具备,所以现实点,从实践出发好了。
842 0
IE中的内存泄露
参考文章: Winter 的《浏览器中的内存泄露》 鸟食轩的《理解并解决IE内存泄露的方式[翻译]》 IBM的《JavaScript中的内存泄露模式》   还有两篇文章: IE's memory-leak fix greatly exaggerated Memory Leakage in Internet Explorer – revisited   IE中内存泄露的几种方式: 1、循环引用(Circular References) — IE浏览器的COM组件产生的对象实例和网页脚本引擎产生的对象实例相互引用,就会造成内存泄漏。
854 0
+关注
10137
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载