`
shenyan1987
  • 浏览: 5756 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

编程注意内存泄漏

阅读更多

1、静态集合类

像HashMap、Vector等静态集合类的使用最容易引起内存泄漏,因为这些静态变量的生命周期与应用程序一致,如果Vector是静态的,那么它将一直存在,而其中所有的object对象也不能被释放,因为它们也将一直被该Vector引用着。

 

2、监听器

在java变成中,我们都需要和监听器打交道,通常一个应用当中会用到很多监听器,我们会调用一个控件的诸如addXXXListener()等方法来增加监听器,但往往在释放对象的时候却没有记住去删除这些监听器,从而增加了内存泄漏的机会。

 

3、物理连接

一些物理连接,比如数据库连接和网络连接,除非其显式的关闭了连接,否则是不会被GC回收的。JAVA数据库连接一般用DataSource.getConnection(),当不再使用时必须用close()方法来释放,因为这些连接是独立于JVM的。对于Resultset和Statement对象可以不进行显式回收,因为Connection在任何时候都无法自动回收,而Connection一旦回收,Resuletset和Statement对象就会立即为NULL,但是如果使用连接池,情况就不一样了,除了要显示地关闭连接,还必须显式地关闭Resuletset Statement对象(关闭其中一个,另外一个也会关闭),否则就会造成大量的Statement对象无法释放,从而引起内存溢出。

 

4、内部类和外部模块等的引用

内部类的引用是比较容易遗忘的一种,而且一旦没释放可能导致一系列的后继类对象没有释放。对于程序员而言,自己的程序很清楚,如果发现内存泄漏,自己对这些对象的应用可以很快定位解决,但是现在的应用软件并非一个人实现,模块互的思想在现代软件中的非常明显,所以程序员要小心外部模块不经意的引用,例如程序员A负责A模块,调用了B模块的一个方法如:public void registerMsg(Object b);这种调用就要非常小心了,传入了一个对象忙,很可能模块B就保持了对该对象的应用,这时候就需要注意模块B是否提供响应的操作去除引用。

分享到:
评论

相关推荐

    Linux 内存泄露查找

    需要注意的是,mtrace只能检测通过malloc/free机制分配和释放的内存,对于其他类型的内存错误(比如越界访问),还需要结合其他工具和技术来进行诊断。希望本文能够帮助开发者更好地理解和应用mtrace工具,提高软件...

    jni层内存泄漏检测工具

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

    使用Android Studio检测内存泄露(LeakCanary)

    内存泄露在Android开发中是一个非常重要的问题,因为它可能导致应用程序运行缓慢、消耗过多资源甚至崩溃。Android Studio提供了多种工具帮助...记住,良好的编程习惯和对内存管理的深入理解,是防止内存泄露的关键。

    C++高效编程:内存与性能优化(PDG)

    3. **智能指针**:`std::unique_ptr`, `std::shared_ptr`和`std::weak_ptr`是C++11引入的智能指针,用于自动管理对象的生命周期,防止内存泄漏。 4. **RAII(Resource Acquisition Is Initialization)**:资源在...

    memory analyzer 内存泄露

    内存泄露是程序运行过程中,不再使用的对象或资源未能被正确释放,从而持续占用系统内存,导致可用内存逐渐减少,甚至可能导致系统崩溃。在Java开发中,内存泄露问题尤为关键,因为Java的垃圾回收机制虽然自动处理大...

    内存泄露定位.zip

    5. **定期检查**:即使在开发过程中,也应定期运行内存泄漏检查,养成良好的编程习惯。 总的来说,Visual Leak Detector是Windows平台上一个强大的工具,它简化了内存泄露的检测过程,帮助程序员快速定位问题,提高...

    内存泄露,闭包 内存泄露,闭包 内存泄露,闭包

    在JavaScript中,由于其自动垃圾回收(Garbage Collection, GC)机制,程序员通常不会直接管理内存,但不恰当的编程习惯可能导致内存泄露。例如,全局变量、循环引用和闭包都可能导致内存无法被正确回收。 闭包是...

    常见内存泄漏与对策及预防措施浅析

    标题和描述中所提及的知识点主要集中在C/C++编程语言中的内存管理问题,特别是内存泄漏这一常见问题。内存泄漏指的是程序在运行过程中未能正确释放已分配的内存,导致这部分内存无法再次被使用,最终可能耗尽系统...

    CString内存泄露HTML.rar

    8. `单模式与Strcore内存泄漏 - 日志 - yinrunmin - 编程中国.htm`: 这篇日志可能分析了单例模式(Singleton)和字符串操作(Strcore)相关的内存泄露问题。 9. `关于 MFC 中 CString 内存泄露的问题(转贴).htm`: ...

    Android内存泄漏简介

    不良的编程习惯也会造成内存泄漏,例如在循环中创建对象、使用非静态内部类持有外部类实例引用等。由于非静态内部类会隐式地持有外部类的引用,如果内部类对象没有被及时回收,那么外部类的实例也无法被回收,从而...

    内存泄露工具.rar

    内存泄漏是编程中一个常见的问题,特别是在C和C++这类没有自动垃圾回收机制的语言中。内存泄漏工具在软件开发和调试过程中起着至关重要的作用,它们可以帮助开发者定位并修复程序中潜在的内存管理错误。本资源是...

    介绍几款 C/C++内存泄漏检测工具.帮程序员擦屁股用

    在C/C++编程中,内存泄漏是一个常见的问题,它会导致程序效率下降,甚至崩溃。为了解决这个问题,程序员可以利用一些内存泄漏检测工具。本文将详细介绍几款实用的C/C++内存泄漏检测工具,帮助程序员有效地找出并修复...

    C# 测试内存泄露.zip

    C# 是一种广泛使用的编程语言,具有强大的垃圾回收(Garbage Collection, GC)机制,旨在自动管理内存,但即使如此,C# 开发者仍可能遇到内存泄露的情况。下面我们将深入探讨C#中内存泄露的现象、原因以及如何检测和...

    浅谈C_C++内存泄漏及其检测工具

    值得注意的是,这些检测工具并非万能,它们往往只能检测到堆内存的泄漏,对于栈内存、全局变量、静态内存等造成的内存泄漏可能无能为力。因此,合理设计数据结构、合理管理内存、良好的编程习惯与使用检测工具相结合...

    内存泄露的例子

    为了避免Java中的内存泄露,开发者需要注意以下几点: 1. 使用弱引用或软引用:对于需要延迟回收的对象,可以考虑使用WeakReference或SoftReference,这样在内存不足时,垃圾收集器仍可回收这些对象。 2. 及时释放...

    vs内存泄漏检测工具

    内存泄漏是编程中一个常见的问题,特别是在C++中,由于缺乏自动垃圾回收机制,程序员需要手动管理内存。Visual Leak Detector(VLDB)是一款专为Visual Studio设计的第三方内存泄漏检测工具,它能帮助开发者在VS项目...

    程序内存泄漏检测库,很实用

    使用内存泄漏检测工具时,开发者需要注意以下几点: 1. **测试环境**:确保在与生产环境相似的条件下进行测试,因为某些内存泄漏可能只在特定环境下出现。 2. **全面测试**:涵盖所有可能的代码路径,因为内存泄漏...

    网络编程语言Java的内存泄露原因分析及处理措施

    在防止内存泄露时,需要注意以下几点: 1. 优化好垃圾收集器的配置,根据不同的 JVM 和系统环境进行调整。 2. 编程人员需要养成良好的编程习惯,例如尽快释放“无用”对象的引用,减少内存泄露的可能性。 3. 减少...

    java之内存泄露

    ### Java之内存泄露 ...总之,虽然Java的自动垃圾回收机制大大减轻了开发者在内存管理方面的负担,但在实际开发过程中仍需注意内存泄露问题。通过采取上述措施,可以有效避免内存泄露,确保程序的稳定性和性能。

Global site tag (gtag.js) - Google Analytics