`

线程可能导致内存泄露的情况

阅读更多

     继承Thread的线程,在交给jdk1.4并发包的线程池执行完毕后并没有被释放资源,而且也没被再利用,而是白白占着内存,导致内存泄露。

    

     默认的Thread本身初始化在1.4是将自己加入了一个ThreadGroup,如果你没有调用它的start方法,JVM不会在该线程结束后将这个thread从TreadGroup中移除,这就是造成内存泄露的原因所在。不过在JDK6上,将加入ThreadGroup这个操作从构造函数转移到了start方法,避免了这个问题。

 

     JDK的concurrent并发包的线程池可以执行实现了Runnable接口的线程,不要使用继承Thread的类,好的编程实践是给线程池传递实现了Runnable接口的类。

 

     这个问题从侧面提醒我们,实现接口总比继承好!

 

 

参考文章:

 

http://www.iteye.com/topic/481170

http://www.iteye.com/topic/11217?page=1

http://www.iteye.com/topic/263928?page=1

分享到:
评论

相关推荐

    BSTR导致内存泄露问题

    3. **多线程环境**:在多线程环境中,如果不同线程同时操作同一个BSTR,可能因同步不当导致内存泄露。 4. **指针拷贝**:当BSTR的指针被复制给其他变量,而没有正确地处理所有权,可能导致多个对象尝试释放同一个...

    内存泄漏与内存溢出

    例如,在C++中,使用`new`关键字分配的内存如果没有通过`delete`操作符释放,就会导致内存泄漏。 2. **循环引用**:在对象之间存在循环引用时,垃圾收集器可能无法识别并回收这些对象,尤其是在支持自动内存管理的...

    SWT内存泄露解决办法

    然而,SWT应用程序可能会遇到内存泄露问题,这会导致程序运行缓慢,甚至崩溃。本文将深入探讨SWT内存泄露的原因、如何检测以及解决方法。 内存泄露通常发生在程序不再需要对象时,但这些对象仍然保留在内存中,无法...

    C#内存释放-线程控制-线程启动-线程暂停

    在C#编程中,线程控制和内存管理是两个至关重要的概念,特别是在处理并发和优化应用程序性能时。...在实践中,应始终注意线程同步和内存管理的最佳实践,以避免可能出现的问题,如死锁、竞态条件和内存泄漏。

    Android内存泄漏的八种可能.pdf

    线程可能会导致内存泄漏,如果线程在 Activity 生命周期结束后没有被释放,可能会导致内存泄漏。 第七种可能:Anonymous Inner Class 匿名内部类可能会导致内存泄漏,如果匿名内部类在 Activity 生命周期结束后...

    Java内存泄露及内存无法回收解决方案

    内存泄漏通常发生在堆内存中,当程序创建对象并分配内存后,如果不再需要这些对象,但程序并没有正确地释放它们,就可能导致内存泄漏。这种情况下,即使垃圾收集器(Garbage Collector, GC)也无法识别出这些对象...

    OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)【转】

    这些函数的使用不当将导致内存泄露,影响程序的稳定性和性能。本文将详细介绍这两个函数的使用方法和解决方案,帮助开发者避免内存泄露的问题。 一、cvLoadImage函数的内存泄露 cvLoadImage函数是OpenCV中加载图像...

    string 多线程 内存泄露

    3. **案例3**:[避免多线程下的内存泄露](https://www.nuomiphp.com/t/60e31538a5e21663cc1fc716.html) 分析了几种可能导致内存泄露的情况,并提供了解决方案。例如,通过合理使用智能指针来管理 `std::string` 的...

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

    内存泄漏作为软件开发中的常见问题,可能导致系统性能下降,甚至系统崩溃。因此,有效的内存泄漏检测工具是开发者不可或缺的助手。"arm环境内存泄漏检测工具valgrind"就是这样一个针对ARM平台的专业工具,它能帮助...

    如何解决Java内存泄漏

    然而,这种自动化管理也可能成为一把双刃剑,特别是当开发人员忽视无效对象的释放时,可能会导致内存泄漏问题。在实际项目中,内存泄漏不仅会影响系统的性能,还可能导致系统不稳定。因此,了解Java内存泄漏的成因、...

    JProfiler对应用服务器内存泄漏问题诊断解决方案.docx

    通过分析,我们可以发现内存长期占用并导致系统不稳定的原因有两种可能: 1. 对象被大量创建而且被缓存,在旧的对象释放前又有大量新的对象被创建使得内存长期高位占用。 2. 内存泄漏问题,表现为内存回收低位点...

    CString内存泄露HTML.rar

    MFC(Microsoft ...- **具体案例**:通过具体的编程问题和代码示例,展示了可能导致内存泄露的常见错误。 对于开发人员来说,理解这些知识点有助于他们在使用CString时避免内存泄露,提高程序的稳定性和效率。

    Python内存泄漏和内存溢出的解决方案

    1. **C扩展模块的内存泄漏**:使用C语言编写的Python扩展模块可能没有正确地管理内存,导致内存无法被Python垃圾回收器回收。 2. **全局变量与容器对象**:全局变量或不断增长的列表、字典等容器对象会导致内存占用...

    详解QT内存泄露问题

    然而,如果子控件中某个对象未正确设置父对象,或者在关闭窗口前手动调用了`delete`,就可能导致内存泄露或运行时错误。 ### 结论 总之,Qt的内存管理机制虽强大,但正确理解和使用才是避免内存泄露的关键。通过...

    内存泄露检查工具

    7. MemoryProfiler:对于Python开发者,有一个名为MemoryProfiler的库,可以用来分析Python脚本运行时的内存使用情况,找出可能的内存泄露点。 使用这些工具时,通常需要按照以下步骤进行: 1. 构建项目:首先,...

    Android内存泄漏简介

    此外,不当的线程使用和频繁的内存分配与回收,都可能导致内存使用异常,增加内存压力。 4. JNI代码的内存泄漏 JNI(Java Native Interface)允许Java代码和本地代码(例如C或C++)进行交互,这也是内存泄漏的常见...

    java内存泄漏分析工具

    Java内存泄漏是一个严重的问题,它会导致程序性能下降,甚至可能导致应用程序崩溃。为了有效地诊断和解决这类问题,开发者需要借助特定的分析工具。本篇将详细探讨Java内存泄漏及其相关的分析工具。 内存泄漏是指...

    VC++多线程下内存操作的优化

    在多线程环境中,频繁地进行内存分配和释放可能导致内存碎片,降低系统性能。可以考虑使用内存池技术,预先分配一大块内存,然后根据需要从中分配小块内存给线程使用,减少系统级的内存分配开销。此外,注意避免内存...

    多线程内存管理

    此外,了解手动引用计数(MRC)依然是非常有价值的,因为在某些情况下,如与使用MRC编写的代码交互或在特定的性能要求下,可能仍需要手动管理内存。 综上所述,ARC技术的引入显著提高了Objective-C内存管理的效率和...

    android系统分析内存泄露测试

    例如,注册监听器未及时注销,BroadcastReceiver、ContentObserver、Service等组件没有正确停止,或者是AsyncTask的实例没有被正确释放,都可能导致内存泄漏。因此,开发过程中应遵循最佳实践,例如,使用弱引用...

Global site tag (gtag.js) - Google Analytics