终于把内存泄漏问题解决了,不是多线程访问静态函数的问题,事实证明只要在静态函数中没有处理多线程共享数据,就不存在着多线程访问同一个静态方法会出现资源冲突的问题,如果在静态方法中有访问多线程共享数据,就要小心多线程同步问题。
同时,在使用线程池进行开发时,要特别注意线程实例的资源释放问题,不要想当然的认为没有创建变量名来引用所创建的线程实例,线程在运行完就会自动释放资源,事实证明并没有释放。如果没有显示创建变量名引用线程实例,系统会自动创建一个隐藏变量来应用这个实例,会造成线程池运行完线程后依然没有释放资源的问题。
下面是我进行内存泄漏分析后的结果。
项目中使用了EDU.oswego.cs.dl.util.concurrent的线程池进行开发,使用线程池运行线程 ProcessThread 。
public class ProcessThread implements Runnable{ 略}
如果就这样使用线程池运行线程会造成严重的内存泄漏问题:
ThreadPool.getInstance().execute( new ProcessThread(messages[i]) );
代码更改后(如下所示),暂时就没有发现内存泄漏了
ProcessThread thread = new ProcessThread(messages[i]);
ThreadPool.getInstance().execute( thread );
thread = null;
分享到:
相关推荐
qt多线程传输文件的静态编译版本,qt多线程传输文件的静态编译版本
PDF电子书《多线程程序数据竞争的静态检测》 ,和大家分享~~
《JAVA多线程设计模式》PDF 下载 《Java线程 高清晰中文第二版》中文第二版(PDF) 前言 第一章 线程简介 Java术语 线程概述 为什么要使用线程? 总结 第二章 Java线程API 通过Thread类创建线程 使用Runable接口...
使用线程池管理多线程上传,包含了文件拆分,文件分片多线程上传,单文件上传。多线程执行任务等待管理。拒绝直接new Thread创建新线程导致的诸多问题
自己写的一个小型静态多线程服务器,只做了GET和PUT方法
易语言多线程支持库2.1含静态库使用多线程可能用到,支持静态编译。。。。。。。。。。
通用静态页面生成服务(多线程,可以随便配置)
多线程Java程序安全行为模型的静态检查方法
iOS多线程开发一 使用NSThread ...但是需要注意在主线程中仅仅能设置线程状态,并不能真正停止当前线程,如果要终止线程必须在线程中调用exist方法,这是一个静态方法,调用该方法可以退出当前线程。
1.Qt下,多线程使用互斥锁安全访问同一全局变量;2.源码中定义了ThreadA和ThreadB,定义变量后,依次调用函数start()来启动重写的run()函数
g++中的局部静态变量的初始化机制及线程安全
这时使用多线程,A线程去加载文件夹下的文件,B线程实现过滤拷贝的工作. 在大型静态生成的项目里体现更突出. 注意事项:备份完成后打包步骤需要安装压缩包运行软件,否则将打包失败. 所以需要先安装压缩包,安装文件为...
boost1.46.1_VS2008多线程静态库版本 已经编译好的静态库版本,适合VS2008 参见文章http://blog.csdn.net/akof1314/archive/2011/03/31/6292980.aspx
简单学习多线程有力的好帮手,我也是刚刚学习总结的自己的经验 希望大家借鉴,
多线程的网络编程链接库,简单的教程。适用于初学者
多线程+Ajax技术 实现Web站点生成静态html页面 解压密码为:17fx.net
通过JNI接口静态注册的native方法去创建线程,同时提供native回调Java的方法。通过这个框架可以去实现线程监听某一个状态,然后回调Java的方法(如发消息去通知顶层,实现显示)
马士兵多线程预习资料。 什么是叫一个进程? 什么叫一个线程? - Program app ->QQ.exe 进程:做一个简单的解释,你的硬盘上有一个简单的程序,这个程序叫QQ.exe,这是一个程序,这个程序是一个静态的概念,它被...
历时两天,把G729A的算法封装成类,所有全局变量、静态变量都封到类中,完美支持多线程。绝对难得。
多线程并发程序的广泛使用引发了更多的数据竞争问题,竞争检测对于提高软件质量具有重要意义。将竞争静态检测和静态切片分析结合起来,提出了一种基于类的java数据竞争静态检测算法,该算法利用函数调用层次获得函数...