Java Application程序内存泄漏检测方法

Java程序有内存泄漏的问题吗?对这篇文章关注的人,一定知道我所指的内存泄漏是什么。一个Java程序运行结束后,退出时,虚拟机会回收所有的资源,包括内存。从这个角度讲Java是不会泄漏内存的(C语言就没有那么幸运了)。但如果一个程序,需要运行很长一段时间,或者用户在使用时会反复操作某个机能,那程序员就需要考虑自己的程序是否有内存泄漏的问题。假设某段程序,申请晚内存后,在没有释放的情况下,又反复的申请,就会出现不断占用内存的情况。当把虚拟机分配给这个程序的内存都耗尽的时候。程序就死掉了。
本文并不想,就如何避免写出内存泄漏的Java程序作更多的讲解(并不是我不想讲解,仅因为Java造诣太浅,这个话题太大了,没有深入全面的研究前,不敢胡说),但就我们项目出现的内存泄漏现象简单归纳为一下几个需要注意问题。
1,第三方类库
我们程序中,多次使用一个第三方的类库(一个可以表示矢量图形的类库),这个类库在使用前,没有详细关心内存是否会被释放的问题。直道有一天,发现这个类库使用不当的情况下,会泄漏内存。具体的是需要在代码中,显示的调用类库的一个方法,回收它的资源。
2,Timer
Timer是一个很灵活的定时类,但这个类不是使用的时候,需要显示的回收它。不然它会一直存在。
3,创建的线程。
虽然,Java 1.5中,仍然没有更方便的线程的结束方法,但编码人员如果认真考虑好线程的运行逻辑,仍然可以很好的控制好线程的生存期(这里我也不详细描述了,有时间再整理一份文档)。
4,模式窗体(JDialog)
要避免模式窗体的递归调用,比如 A模式窗体创建一个B模式窗体,B模式窗体在某种情况下又创建A模式窗体。模式窗体的回收方式比较特别,在B的实例存在的情况下,是不会回收A实例的。这样,上面的模型反复调用的时候,内存就泄漏了。

该进入正题了,Java中用什么来查看程序的内存使用情况呢?从1.5开始Java自带了一个内存查看工具,是/Java/jdk1.5.0_10/bin 下的jconsole.exe。
1在运行这个工具前,需要给程序设置一个启动参数,-Dcom.sun.management.jmxremote

2 运行程序后,双击运行jconsole.exe。选择监视自己的程序。
3 运行程序,jconsole.exe会把内存的使用状况以折线图的方式,表示出来。当运行一段时间
点击GC,进行强制垃圾回收后,程序的内存没有下降到平时的高度时,就有理由怀疑程序有内存泄漏的问题了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值