Java系统中内存泄露测试办法的研究[Java编程]
本文“Java系统中内存泄露测试办法的研究[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
摘 要 安定性是衡量软件系统质量的重要指标,内存泄露是破坏系统安定性的重要因素.由于采取垃圾回收机制,Java语言的内存泄露的情势与C++等语言相比有很大的差别.全文通过与C++中的内存泄露问题举行比较,报告了Java内存泄露的基本原理,以及若何借助Optimizeit profiler工具来测试内存泄露和解析内存泄露的缘由,在实践中证明这是一套行之有效的办法.
关键词 Java; 内存泄露; GC(垃圾汇集器) 引用; Optimizeit
问题的提出
笔者曾经参与开辟的网管系统,系统规模宏大,触及上百万行代码.系统主要采取Java语言开辟,大体上分为客户端、服务器和数据库三个层次.在版本进入测试和试用的历程中,现场人员和测试部人员纷纷反映:系统的安定性对比差,常常会呈现服务器端运行一昼夜就死机的现象,客户端跑死的现象也对比频繁地发生.关于网管系统来说,常常性的服务器死机是个对比严重的问题,因为频繁的死机不但大概招致前后台数据不一致,发生错误,更会惹起用户的不满,降低客户的信任度.因此,服务器端的安定性问题必须尽快办理.
办理思绪
通过察看服务器端日记,发现死机前服务器端频繁抛出OutOfMemoryException内存溢出错误,因此初步把死机的缘由定位为内存泄露惹起内存不足,进而惹起内存溢出错误.若何查找惹起内存泄露的缘由呢?有两种思绪:第一种,安置有经验的编程人员对代码举行走查和解析,找出内存泄露发生的位置;第二种,利用专门的内存泄露测试工具Optimizeit举行测试.这两种办法都是办理系统安定性问题的有效手段,利用内存测试工具关于已经表暴露来的内存泄露问题的定位和办理非常有效;但是软件测试的理论也奉告我们,系统中永久存在一些没有表暴露来的问题,并且,系统的安定性问题也不但仅只是内存泄露的问题,代码走查是提高系统的整体代码质量乃至办理潜在问题的有效手段.基于这样的考虑,我们的内存安定性工作决意采代替码走查结合测试工具的利用,双管齐下,争取对比完好地办理系统的安定性问题.
在代码走查的工作中,安置了对系统业务和开辟语言工具对比熟习的开辟人员对利用的代码举行了穿插走查,找出代码中存在的数据库衔接声明和后果集未关闭、代码冗余和低效等弊端若干,获得了杰出的效果,文中主要报告结合工具的利用对已经呈现的内存泄露问题的定位办法.
内存泄露的基本原理
在C++语言程序中,利用new操作符成立的对象,在利用完毕后应当通过delete操作符显示地释放,不然,这些对象将占用堆空间,永久没有办法得到回收,从而惹起内存空间的泄露.以下的简单代码便可以惹起内存的泄露:
void function(){
Int[] vec = new int[5];
}
在function()办法履行完毕后,vec数组已经是不可达对象,在C++语言中,这样的对象永久也得不到释放,称这种现象为内存泄露.
而Java是通过垃圾汇集器(Garbage Collection,GC)自动管理内存的回收,程序员不需求通过调用函数来释放内存,但它只能回收无用并且不再被别的对象引用的那些对象所占用的空间.在下面的代码中,循环申请Object对象,并将所申请的对象放入一个Vector中,假如仅仅释放对象本身,但是因为Vector仍旧引用该对象,所以这个对象对GC来说是不可回收的.因此,假如对象加入到Vector后,还必须从Vector中删除,最简单的办法就是将Vector对象设置为null.
Vector v = new Vector(10);
for (int i = 1; i < 100; i++)
{
Object o = new Object();
v.add(o);
o = null;
}//此时,全部的Object对象都没有被释放,因为变量v引用这些对象.
以上是“Java系统中内存泄露测试办法的研究[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |