预防和检测内存漏洞
在了解了引起内存泄漏的一些原因后,应该尽可能地避免和发现内存泄漏。
(1)好的编码习惯。最基本的建议就是尽早释放无用对象的引用,大多数程序员在使用临时变量的时候,都是让引用变量在退出活动域后,自动设置为null。在使用这种方式时候,必须特别注意一些复杂的对象图,例如数组、列、树、图等,这些对象之间有相互引用关系较为复杂。对于这类对象,GC 回收它们一般效率较低。如果程序允许,尽早将不用的引用对象赋为null。
另外建议几点:
在确认一个对象无用后,将其所有引用显式的置为null;
当类从Jpanel 或Jdialog 或其它容器类继承的时候,删除该对象之前不妨调用它的removeall()方法;
在设一个引用变量为null 值之前,应注意该引用变量指向的对象是否被监听,若有,要首先除去监听器,然后才可以赋空值;
当对象是一个Thread 的时候,删除该对象之前不妨调用它的interrupt()方法;
内存检测过程中不仅要关注自己编写的类对象,同时也要关注一些基本类型的对象,例如:int[]、String、char[]等等;
如果有数据库连接,使用try...finally 结构,在finally 中关闭Statement 对象和连接。
(2)好的测试工具。在开发中不能完全避免内存泄漏,关键要在发现有内存泄漏的时候能用好的测试工具迅速定位问题的所在。市场上已有几种专业检查Java 内存泄漏的工具,它们的基本工作原理大同小异,都是通过监测Java 程序运行时,所有对象的申请、释放等动作,将内存管理的所有信息进行统计、分析、可视化。开发人员将根据这些信息判断程序是否有内存泄漏问题。这些工具包括J Optimizer 、JProbe等。
JProbe介绍:http://www.innovatedigital.com/node/623
J Optimizer 介绍:http://www.innovatedigital.com/node/626