电脑内存泄漏是怎么回事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了电脑内存泄漏是怎么回事相关的知识,希望对你有一定的参考价值。

cpu资源耗尽:估计是机器没有反应了,键盘,鼠标,以及网络等等。这个在windows上经常看见,特别是中了毒。
  进程id耗尽:没法创建新的进程了,串口或者telnet都没法创建了。
  硬盘耗尽: 机器要死了,交换内存没法用,日志也没法用了,死是很正常的。
  内存泄漏或者内存耗尽:新的连接无法创建,free的内存比较少。发生内存泄漏的程序很多,但是要想产生一定的后果,就需要这个进程是无限循环的,是个服务进程。当然,内核也是无限循环的,所以,如果内核发生了内存泄漏,情况就更加不妙。内存泄漏是一种很难定位和跟踪的错误,目前还没看到有什么好用的工具(当然,用户空间有一些工具,有静态分析的,也会动态分析的,但是找内核的内存泄漏,没有好的开源工具)
  内存泄漏和对象的引用计数有很大的关系,再加上c/c++都没有自动的垃圾回收机制,如果没有手动释放内存,问题就会出现。如果要避免这个问题,还是要从代码上入手,良好的编码习惯和规范,是避免错误的不二法门。
  一般我们常说的内存泄漏是指堆内存的泄漏。
  堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。
  应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。
  (附)部分内存泄漏检测工具
  1.ccmalloc-Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库。
  2.Dmalloc-Debug Malloc Library.
  3.Electric Fence-Linux分发版中由Bruce Perens编写的malloc()调试库。
  4.Leaky-Linux下检测内存泄漏的程序。
  5.LeakTracer-Linux、Solaris和HP-UX下跟踪和分析C++程序中的内存泄漏。
  6.MEMWATCH-由Johan Lindh编写,是一个开放源代码C语言内存错误检测工具,主要是通过gcc的precessor来进行。
  7.Valgrind-Debugging and profiling Linux programs, aiming at programs written in C and C++.
  8.KCachegrind-A visualization tool for the profiling data generated by Cachegrind and Calltree.
  9.IBM Rational PurifyPlus-帮助开发人员查明C/C++、托管.NET、Java和VB6代码中的性能和可靠性错误。PurifyPlus 将内存错误和泄漏检测、应用程序性能描述、代码覆盖分析等功能组合在一个单一、完整的工具包中。
  10.Parasoft Insure++-针对C/C++应用的运行时错误自动检测工具,它能够自动监测C/C++程序,发现其中存在着的内存破坏、内存泄漏、指针错误和I/O等错误。并通过使用一系列独特的技术(SCI技术和变异测试等),彻底的检查和测试我们的代码,精确定位错误的准确位置并给出详细的诊断信息。能作为Microsoft Visual C++的一个插件运行。
  11.Compuware DevPartner for Visual C++ BoundsChecker Suite-为C++开发者设计的运行错误检测和调试工具软件。作为Microsoft Visual Studio和C++ 6.0的一个插件运行。
  12.Electric Software GlowCode-包括内存泄漏检查,code profiler,函数调用跟踪等功能。给C++和.Net开发者提供完整的错误诊断,和运行时性能分析工具包。
  13.Compuware DevPartner Java Edition-包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块。
  14.Quest JProbe-分析Java的内存泄漏。
  15.ej-technologies JProfiler-一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。它把CPU、执行绪和内存的剖析组合在一个强大的应用中。
  16.BEA JRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。
参考技术A

    所谓的内存泄漏可以理解为内存单元逐渐被无用的数据占用,在c c++里可以通过内存单元没有释放引起,java里可以通过未对作废数据内存单元的引用置null引起分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃。

    内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况,重起计算机可以解决,但是也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件设计缺陷引起的。

    内存泄漏可以分为4类:

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

    2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。

    3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。

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

参考技术B 内存泄漏是由于申请的系统资源在用完后,没释放掉,
解决吗,一是及时释放资源,二优化算法,不过对编译
工具本身的泄漏好像无能为力
参考技术C 应用程序冲突 无所谓
没什么影响 最多就是有的应用程序不能继续工作~~
哈哈 应该是益处的

电脑上显示“没有足够的内存运行此程序”,以及“系统资源严重不足”是怎么回事?怎么样解决?

虚拟内存是什么呀,怎么弄大呀

解决“内存不足”的办法9则
一、剪贴板占用了太多的内存
实际上,剪贴板是内存中的一块临时区域,当你在程序中使用了“复制”或“剪切”命令后,Windows将把复制或剪切的内容及其格式等信息暂时存储在剪贴板上,以供“粘贴”使用。如果当前剪贴板中存放的是一幅图画,则剪贴板就占用了不少的内存。这时,请按下述步骤清除剪贴板中的内容,释放其占用的内存资源:
1.单击“开始”,指向“程序”或“所有程序”,指向“附件”,指向“系统工具”,然后单击“剪贴板查看程序”,打开“剪贴板查看程序”窗口。2.在“编辑”菜单上,单击“删除”命令。3.关闭“剪贴板查看程序”窗口。
为了与Microsoft Office程序提供的多重剪贴板相区分,上述所说的剪贴板,常被我们称为系统剪贴板。如果你正在使用Micros OftOffice程序,而且使用了其多重剪贴板功能,那么你应清空“Office剪贴板”上的项目,方法是:在“Office剪贴板”任务窗格(OfficeXP)或工具栏(Office2000)上,单击“全部清空”或“清空‘剪贴板’”。当清空“Office剪贴板”时,系统剪贴板也将同时被清空
二、打开的程序太多
如果同时打开的文档过多或者运行的程序过多,就没有足够的内存运行其他程序。这时,对于多文档界面(MDl)程序,如Word、Excel等,请关闭当前文档外的所有文档,并退出当前未使用的程序,然后或许你就能够继续执行因“内存不足”而被中断的任务。
三、重新启动计算机
如果只退出程序,并不重新启动计算机,程序可能无法将内存资源归还给系统。请重新启动计算机以释放系统资源,然后再次运行程序或执行被中断的任务。
四、自动运行的程序太多
如果在启动Windows时自动运行的程序太多,那么,即使重新启动计算机,也没足够的内存用来运行其它程序。
(一)确定设置为自动运行的程序是否太多
1.单击“开始”,然后单击“运行”。
2.在“打开”框中,键入“Msconfig”,单击“确定”按钮,打开“系统配置实用程序”窗口。
3.单击“常规”选项卡,选中“选择性启动”复选钮,清除“处理Win.ini文件”复选框和“加载启动组项目”复选框。
4.单击“确定”按钮,当系统提示重新启动计算机时,请单击“是”按钮。
重新启动电脑后,如果内存不足的问题已经解决,你就可以将计算机配置为启动时不打开任何程序。
(二)配置计算机不自动打开任何程序
1.恢复在Msconfig中所作的更改,方法是:在“系统配置实用程序”窗口,单击“常规”选项卡,选择“正常启动”,单击“确定”按钮,然后重新启动计算机。
2.删除“启动”文件夹中的所有快捷方式
①单击“开始”,指向“设置”,然后单击“任务栏和开始菜单”,系统弹出“任务栏属性”对话框。
②单击“开始菜单程序”选项卡,单击“删除”按钮。
③单击“启动”文件夹旁的加号,以显示设置为自动运行的程序列表。如果“启动”文件夹旁没有加号“+”,则表明没有设置为自动运行的程序,请单击“关闭”按钮以终止此过程。
④单击“启动”文件夹中的每个快捷方式,然后单击“删除”按钮。此操作将从“开始”菜单中删除快捷方式,但并不从硬盘中删除相应的程序。对于“启动”文件夹中的每个快捷方式,重复该步骤。
⑤单击“关闭”按钮。
⑥单击“确定”按钮。
3.禁用从Win.ini文件加载的所有程序
①如上所述打开“系统配置实用程序”窗口。
②单击“Win.ini”选项卡,双击“[windows]”,然后清除“Load=”和“Run=”复选框。
③单击“确定”按钮,当系统提示重新启动计算机时,请单击“是”按钮。
五、让Windows管理虚拟内存设置
如果没有设置让Windows管理虚拟内存或者禁用虚拟内存,那么计算机可能无法正常工作,也可能收到“内存不足”的消息,或在运行某程序时出现相同的错误消息。
1.单击“开始”,单击“设置”,单击“控制面板”,然后双击“系统”。
2.在“系统属性”对话框中,单击“性能”选项卡,然后单击“虚拟内存”按钮。
3.选中“让Windows管理虚拟内存设置—(推荐)”选项,将计算机中可作为虚拟内存使用的硬盘空间量设置为默认值。此时,虚拟内存分页“win386.swp”能够根据实际内存的使用情况动态缩小和放大,最小容量为0,最大容量为硬盘的全部可用空间。
4.单击“确定”按钮。
六、增加可用磁盘空间
由于Windows以虚拟内存分页文件的格式使用硬盘空间以模拟RAM(),所以,尽管已设置为让Windows管理虚拟内存,但是当虚拟内存分页文件所在的驱动器(默认为Windows系统所在的硬盘分区)没有足够的空间时,仍会出现“内存不足”的错误。此时,请执行以下一项或多项操作,增加Windows虚拟内存分页文件所在驱动器上的可用空间:
1.清空回收站,方法是:在桌面上,右键单击“回收站”,再单击“清空回收站”。
2.从磁盘中删除临时文件,方法是:打开“Windows资源管理器”或“我的电脑”窗口,右键单击要释放其空间的磁盘,然后单击“属性”,在“常规”选项卡上,单击“磁盘清理”按钮,选中要删除的不需要的文件前的复选框(如图3),可以阅读列表下面区域中每个文件类型的说明,单击“确定”按钮。
3.从磁盘中删除过期的文件或已存档的文件。
4.删除从未使用过的所有文件。
七、程序文件被毁坏
如果仅仅是使用某个程序时,系统提示内存不足,而其他程序可以正常运行,那么可能的原因是该程序文件被毁坏,从而导致内存问题。然而Windows并没有确切地提示表明该程序已损坏,所以请尝试删除并重新安装该程序,然后重新运行该程序。如果系统不再提示内存不足,那么说明原程序文件确实被损坏。
八、使用内存优化软件
内存优化软件有很多,比如RAM Idle和Memo Kit就是比较出色的两个。这些软件都可以设置自动清空剪贴板、释放被关闭程序未释放的内存、对Win386.swp文件进行重新组织等,从而免除你手工操作的麻烦,达到自动释放内存的目的,不妨一试!
九、查杀病毒
系统感染电脑病毒也是导致内存不足的罪魁祸首,当系统出现“内存不足”的错误时,请使用最新的防毒软件查杀病毒,或者在清除电脑病毒之后,就解决了“内存不足”的问题。

Windows本身是内存消耗大户,会占用大量的系统资源,如果物理内存不多,经常会因为占用物理内存过多导致提示内存不足。但有时,Windows中的内存不足提示并不一定能准确反映出导致问题的原因。一般来说,Windows系统会在以下几种情况下提示“内存不足”:
第一,用Windows附带的记事本程序拷贝一些网络上的信息,准备汇总后编辑——但是当粘贴了几次后,经常会跳出一个对话框,说“内存不足,***文件无法被保存”。这一提示容易让人误认为是内存出了问题,如果按此提示去查找原因,费时费力也解决不了问题。其实这是记事本程序本身的功能限制和设计的问题,超过64K字节的内容就不能再编辑了。
第二,在浏览网页的时候经常跳出“内存不足”的提示。由于Windows没有详细描述内存、虚拟内存和临时文件缓冲区的不同,所以经常使人误以为是物理内存出现问题。其实在很多时候,这是由于IE属性设置中分配给internet临时文件的磁盘空间的大小不够造成,从而导致脱机浏览的内容无法被保存。要解决这一问题,只要在IE的右键菜单中选择属性,单击“设置”按钮,将Internet临时文件夹中的“使用的磁盘空间”调大一些即可。
第三,在某些情况下, P4机器上安装了主板驱动和其他驱动程序后再安装office2000,在使用office2000时也有一定几率会提示内存不足。这是由于P4主板驱动和office2000存在一些兼容性问题,可以尝试备份数据后重新安装操作系统,然后先安装office2000,再安装主板驱动等其他驱动程序,便可以较好的解决该问题。
第四,很常见的导致“内存不足”提示的原因是因为感染病毒。由于病毒在内存中大量复制,所以造成报错提示。一般杀毒后即可解决该问题。
1
参考技术A 第一,可能是中毒了,全面杀毒试试。
第二,内存不足,右键单击我的电脑,在选属性,在选高极,看到第一个性能就选设置,再选高级,看到虚拟内存把你的内存给调高就可以了。
第三,你的C盘可能存的太多的,把没有用的删掉吧。
如果还是这样的话,你的电脑就要好好处理了!
参考技术B 内存不足引起,加内存就好了,或者增加虚拟内存也可以 参考技术C 可能中了蠕虫类病毒,杀毒吧 参考技术D ......你的C盘,没有什么空间了吧,去看看,主要是因为虚拟内存不足引起的。
第一,你是不是安装软件时没有更改默认的安装目录,结果都弄到了C盘?删除重装或者剪切到别的盘把
第二,你的C盘系统还原关掉了没有?
第三,下载个系统辅助软件自动删除C盘的垃圾文件。

以上是关于电脑内存泄漏是怎么回事的主要内容,如果未能解决你的问题,请参考以下文章

经常出现蓝屏 说物理内存溢出怎么办?

SearchView在Android应用中泄漏内存

为啥我有内存泄漏?我无法解决

一次毕生难忘的 Java 内存泄漏排查经历

一次毕生难忘的 Java 内存泄漏排查经历

彻底理解内存泄漏,memory leak