来自Sawin软件研发之窗
1)查看内存泄漏的方法:
第一种,安排有经验的编程人员对代码进行走查和分析,找出内存泄漏发生的位置;
第一个步骤在代码走查的工作中,可以安排对系统业务和开发语言工具比较熟悉的开发人员对应用的代码进行了交叉走查,尽量找出代码中存在的数据库连接声明和结果集未关闭、代码冗余等故障代码
第二种,使用专门的内存泄漏测试工具进行测试
第二个步骤就是检测Java的内存泄漏。在这里我们通常使用一些工具来检查Java程序的内存泄漏问题。市场上已有几种专业检查Java内存泄漏的工具,它们的基本工作原理大同小异,都是通过监测Java程序运行时,所有对象的申请、释放等动作,将内存管理的所有信息进行统计、分析、可视化。开发人员将根据这些信息判断程序是否有内存泄漏问题。这些工具包括Optimizeit Profiler,JProbe Profiler,JinSight , Rational 公司的Purify等。
2)Java发生内存泄漏的原因:
在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。
几种典型的内存泄漏:1)全局集合;2)缓存;3)类装载器
3)Java内存泄漏检查工具:
- Optimizeit Profiler
- JProbe Profiler
- JinSight
- Rational 公司的Purify
- Ensureft
- PARASOFT
- BEA JRockit
- ej-technologies JProfiler
- Quest JProbe
- Compuware DevParther Java Edition
但是这些产品的价格都非常昂贵:
- Optimizeit Profiler for .NET Framework 1.1 (1 user)报价 ¥12500;
- JProbe Profiler 由sitraka公司生产,价格$649
4)解决方法,我认为我们应该
- 首先从代码审查开始着手,审查代码中可能出现内存泄漏的地方;
- 再次利用一些免费的Java内存泄漏检查工具进行检查;
- 当以上方法都行不通的时候可以采取购买付费的内存泄漏检查工具。
关于内存泄漏检查上的一个名言:
内存泄漏分析是一项比较复杂的工程,人对内存泄漏的深刻理解才是最重要的,因为工具有时候无法检测出内存泄漏
所以关键工作要做好第一步
5)我的建议:建议在公司内部建立起定期的代码检查制度,结合我们公司的情况,可以每2周或者每月搞一次,每次执行约为4-5天时间(1天发检查的代码及本次检查的重点(比如内存泄漏),2-3天进行代码检查,1天进行代码检查结果讨论及结果存储,以后1到2周时间进行代码修改及复审),代码的检查贵在平时的积累,而不是靠一时的突击。
【作者介绍】 Jerry作者Email地址:xianggu@yahoo.com
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14780873/viewspace-531799/,如需转载,请注明出处,否则将追究法律责任。