`
webcenterol
  • 浏览: 950799 次
文章分类
社区版块
存档分类
最新评论

内存泄漏检测工具

 
阅读更多

内存泄漏(memory leak),指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。

在编程时进行动态内存分配是非常必要的,它可以在程序运行的过程中帮助分配所需的内存,而不是在进程启动的时候就进行分配。然而有效地管理这些内存同样也是非常重要的。

在大型的、复杂的应用程序中,内存泄漏是常见的问题,当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,那么对于该进程来说,会因此导致总可用内存的减少,这时就出现了内存泄漏。


常见检测内存泄漏的工具:


C/C++

1.ValgrindDebugging and profiling Linux programs, aiming at programs written in C and C++.

2.ccmallocLinuxSolaris下对CC++程序的简单的使用内存泄漏和malloc调试库。

3.LeakTracerLinuxSolarisHP-UX下跟踪和分析C++程序中的内存泄漏。

4.Electric FenceLinux分发版中由Bruce Perens编写的malloc()调试库。

5.LeakyLinux下检测内存泄漏的程序。

6.DmallocDebug Malloc Library.

7.MEMWATCH-由Johan Lindh编写,是一个开放源代码C语言内存错误检测工具,主要是通过gccprecessor来进行。

8.KCachegrindA visualization tool for the profiling data generated byCachegrindandCalltree.


Java

1. Memory Analyzer-是一款开源的JAVA内存分析软件,查找内存泄漏,能容易找到大块内存并验证谁在一直占用它,它是基于Eclipse RCP(Rich Client Platform),可以下载RCP的独立版本或者Eclipse的插件。

2.JProbe-分析Java的内存泄漏。

3.JProfiler-一个全功能的Java剖析工具,专用于分析J2SEJ2EE应用程序。它把CPU、执行绪和内存的剖析组合在一个强大的应用中,GUI可以找到效能瓶颈、抓出内存泄漏、并解决执行绪的问题。

4.JRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。

5.YourKit.NET & Java Profiling业界领先的Java.NET程序性能分析工具。

6.AutomatedQAAutomatedQA的获奖产品performance profilingmemory debugging工具集的下一代替换产品,支持Microsoft, Borland, Intel, CompaqGNU编译器。可以为.NETWindows程序生成全面细致的报告,从而帮助您轻松隔离并排除代码中含有的性能问题和内存/资源泄露问题。支持.Net 1.0,1.1,2.0,3.0Windows 32/64位应用程序。

7.CompuwareDevPartner Java Edition-包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块。


.NET

1. .NET Memory Profiler找到内存泄漏并优化内存使用针对C#VB.Net,或其它.Net程序。

2.Windows Leaks Detector-探测任何Win32应用程序中的任何资源泄漏(内存,句柄等),基于Win API调用钩子。

3.DTrace一款开源动态跟踪Dynamic Tracing,能在Unix类似平台运行,用户能够动态检测操作系统内核和用户进程,以更精确地掌握系统的资源使用状况,提高系统性能,减少支持成本,并进行有效的调节。

4.IBM RationalPurifyPlus-帮助开发人员查明C/C++、托管.NETJavaVB6代码中的性能和可靠性错误。PurifyPlus将内存错误和泄漏检测、应用程序性能描述、代码覆盖分析等功能组合在一个单一、完整的工具包中。

5.ParasoftInsure++-针对C/C++应用的运行时错误自动检测工具,它能够自动监测C/C++程序,发现其中存在着的内存破坏、内存泄漏、指针错误和I/O等错误。并通过使用一系列独特的技术(SCI技术和变异测试等),彻底的检查和测试我们的代码,精确定位错误的准确位置并给出详细的诊断信息。能作为Microsoft Visual C++的一个插件运行。

6.CompuwareDevPartner for Visual C++ BoundsChecker Suite-为C++开发者设计的运行错误检测和调试工具软件。作为Microsoft Visual StudioC++ 6.0的一个插件运行。

7.Electric SoftwareGlowCode-包括内存泄漏检查,code profiler,函数调用跟踪等功能。给C++.Net开发者提供完整的错误诊断,和运行时性能分析工具包。


FireFox / IE

1.Leak Monitor-一个Firefox扩展,能找出跟Firefox相关的泄漏类型。

2.IE Leak Detector (Drip/IE Sieve)DripIE Sieve leak detectors帮助网页开发员提升动态网页性能通过报告可避免的因为IE局限的内存泄漏。

3.JavaScript Memory Leak Detector-微软全球产品开发欧洲团队(Global Product Development- Europe team, GPDE)发布的一款调试工具,用来探测JavaScript代码中的内存泄漏,运行为IE系列的一个插件。

内存泄漏的发生方式

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

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

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

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

什么是系统资源

当应用程序在Windows中运行时,Windows必须实时"跟踪"该应用程序的运行,并保留与之相关的许多信息,如按钮、光标、菜单的位置和位图、窗口的状况等,这些信息由Windows保留在一种叫堆的内存块中,堆的英文为Heap。简单地说,堆是采用特殊机制管理的内存块。由Windows的一个系统内核User.exe管理的堆叫做User资源堆(User Resource Heap),由另一个系统内核Gdi.exe管理的堆叫做GDI资源堆(Graphical Device Interface Resource Heap,简称GDI Resource Heap),User资源堆和GDI资源堆合称为系统资源堆(System Resource Heap),习惯上就把它们叫做系统资源(System Resource)。


微软将Windows的系统资源(堆)分为五个堆,其中User资源堆为三个,而GDI资源堆为两个。

三个User资源堆分别是:

16位的用户堆(User Heap64KB);

32位的窗口堆(Windows Heap2MB);

32位的用户菜单堆(User Menu Heap2MB)。


两个GDI资源堆分别是:16位的GDI堆(GDI Heap64KB);32位的GDI堆(GDI2MB)。

从这里的系统资源分类和大小我们应该明白,不管CPUP4还是486,内存是8M还是1G,所有Windows的用户都拥有同样大小的系统资源(堆),用户不能自已增加或减少系统资源的大小,这是由操作系统决定的,与硬件档次没有任何关系。

WindowsUser资源堆和GDI资源堆的可用(Free)空间称为可用User资源和可用GDI资源,Windows中以百分数表示它们,用户可以选择"开始/附件/系统工具/系统信息",来实时查看它们的大小。


Java内存泄露的理解与解决

Java内存溢出(OutOfMemory)工具

分享到:
评论

相关推荐

    windows下c++内存泄露检测工具使用方

    ### Windows 下 C++ 内存泄露检测工具使用详解 在 Windows 平台下进行 C++ 开发时,内存管理是一项非常重要的任务。由于 C++ 语言本身的特性,开发者需要手动管理内存分配与释放,这就很容易导致内存泄露的问题。...

    jni层内存泄漏检测工具

    JNI层内存泄漏检测工具是针对Android应用开发中的一个重要问题——JNI内存泄漏的解决方案。JNI,全称为Java Native Interface,允许Java代码与其他编程语言(如C++)交互,从而利用其性能优势。然而,由于Java和C/...

    内存泄露检测工具

    内存泄露检测工具 内存泄露是指计算机程序在运行过程中,无法释放已经分配的内存空间,从而导致内存泄露的现象。内存泄露检测工具是用于检测和解决内存泄露问题的软件工具。以下是常用的内存泄露检测工具: 1. ...

    Lua内存泄露检测工具LuaMonitor下载.rar

    本文将详细介绍Lua内存泄露检测工具LuaMonitor,以及如何利用它来提升项目性能。 LuaMonitor是一款专门针对Lua环境设计的内存泄露检测工具。它提供了一个直观的视图分析界面,帮助开发者了解程序在运行过程中内存的...

    vc++内存泄漏检测工具

    标题中提到的"vc++内存泄漏检测工具",通常指的是用于检测Visual C++编译的程序中内存泄漏的工具。这类工具可以帮助开发者定位和修复内存管理错误,确保程序的健壮性和稳定性。在C++环境中,内存泄漏检测通常通过...

    arm环境内存泄漏检测工具valgrind

    "arm环境内存泄漏检测工具valgrind"就是这样一个针对ARM平台的专业工具,它能帮助我们识别并解决内存泄漏问题。 Valgrind是一个开源的动态分析工具集,主要用于调试、性能评估和内存错误检测。在ARM环境下,...

    Windows内存泄漏排查工具

    为了解决这个问题,开发者通常会使用专门的内存泄漏检测工具。本文将详细介绍两个用于Windows平台的内存泄漏排查工具:LeakDiag和LDGrapher。 **LeakDiag** LeakDiag是由微软开发的一款轻量级内存泄漏检测工具,...

    JS内存泄漏检测工具

    JS内存泄漏检测工具:IEJSLeaksDetector

    内存泄露检测工具boundschecker11.rar

    BoundsChecker是一款由Compuware公司开发的著名内存泄露检测工具,专用于帮助程序员发现和修复这类问题。这款工具以其强大的功能和易用性在IT行业内得到了广泛的认可。 BoundsChecker 11版本可能是该工具的一个特定...

    C++内存泄漏检测工具

    "Virtual Leak Detector"是一款针对C++的内存泄漏检测工具,它被设计用来帮助开发者定位并修复程序中的内存泄漏问题。这款工具通过对程序运行时的内存分配和释放进行跟踪,能够准确报告那些未被释放的内存块。通过...

    vs内存泄漏检测工具

    Visual Leak Detector(VLDB)是一款专为Visual Studio设计的第三方内存泄漏检测工具,它能帮助开发者在VS项目中定位和解决内存泄漏问题。 **1. 内存泄漏的理解** 内存泄漏是指程序在申请内存后,无法释放已申请的...

    两个超棒的内存泄露检测工具

    本文将详细介绍两款备受推崇的内存泄露检测工具,帮助开发者有效地找出并解决这类问题。 第一款工具是Valgrind。Valgrind是一款开源的动态分析工具,广泛用于内存泄漏检测、性能分析以及错误检测。它通过在运行时为...

    内存泄露检测工具--VisualLeakDetector

    Visual Leak Detector(VLD)是一款专门为Microsoft Visual C++编译器设计的内存泄露检测工具。它可以在你的应用程序运行时自动检测内存泄露,并提供详细的报告,帮助开发者找出问题所在。VLD通过链接到你的可执行...

    Web 的内存泄漏检测工具

    内存泄漏 Web 的内存泄漏检测工具 更多信息请查看 www.iubang.com

    内存泄露检测工具.net memory profile

    工具为评估试用版; 可以分析.net平台下编写的各类软件; 可以分析扩管类和非托管类代码;

    推荐4款linux下的c语言内存泄漏检测工具.zip

    推荐4款linux下的检测c语言编写的程序的内存泄漏工具 C语言和其他语言相比最大的特色就是能够操作内存 但是最常犯的错误也是内存泄漏(管杀不管埋) 所以我们需要用一些工具来帮助我们检测是否...奉上几款内存检测工具

    CheckMen 测试 Delphi内存泄漏工具

    CheckMen是一款专为Delphi开发者设计的内存泄漏检测工具,其核心组件是`CheckMem.pas`单元。这个工具的目的是帮助程序员在开发过程中找出可能导致内存泄漏的代码段,从而提高软件的稳定性和性能。 Delphi是一种基于...

Global site tag (gtag.js) - Google Analytics