`
Illy
  • 浏览: 122864 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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,进行强制垃圾回收后,程序的内存没有下降到平时的高度时,就有理由怀疑程序有内存泄漏的问题了。

分享到:
评论

相关推荐

    java 面试题 总结

    忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。 25、short s1 = 1; s1 =...

    操作系统(内存管理)

    free:该函数获得指向由 malloc 分配的内存片段的指针,并将其释放,以便以后的程序或操作系统使用(实际上,一些 malloc 实现只能将内存归还给程序,而无法将内存归还给操作系统)。 物理内存和虚拟内存 要理解...

    超级有影响力霸气的Java面试题大全文档

    忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。 28、short s1 = 1; s1 =...

    StrictModeUtils.java

    但属实还是非常好用的, 在开发阶段使用这个工具,能够很好的帮助发现开发中的一系列不规范的编码, 例如主线程访问网络,主线程读写磁盘,等等耗时操作,另外的一大特性就是可以帮助开发时,发现程序存在内存泄漏的...

    Java面试宝典2020修订版V1.0.1.doc

    43、什么是java内存泄漏,怎么预防? 85 七、框架部分 85 1、谈谈你对Struts2的理解。 85 2、谈谈你对Hibernate的理解。 86 3、你对Spring的理解。 87 4、Struts2优缺点 87 5、ORM工作原理? 89 6、struts2的核心...

    Java经典入门教程pdf完整版

    发的版本,例如:我们平常熟悉的 Application桌面应用程序。这个版本是个基础,它也是 我们半常开发和使用最多的技术,Java的主要的技术将在这个版本中体现。本书主要讲的 就是JSF。 2:Java微缩版:JME( Java Micro ...

    LibUtils:Android实用程序类

    Leak Canary还具有自动检查内存泄漏的功能。描述com.miya38.activity 有AbstractActivity和AbstractConnectionActivity。通过继承此类,将自动输出自动内存清除,连接通用性和生命周期日志。 ...

    DWR.xml配置文件说明书(含源码)

    因为调用远程bean的方法前DWR不会检测将要执行的方法是不是静态方法,如果是静态方法那么creator就不用创建.这种机制可以适用任何类型的creator,但new类型的creator是最简单配置的. 3.2 Security Creator可以配置类的...

    Quantify-1.pdf

    内存资源泄漏检查:Numega中的bouncechecker,Rational的Purify等 代码覆盖率检查:Numega中的truecoverage,Rational的Purecoverage,Telelogic公司的logiscope, Macabe公司的Macabe等 代码性能检查 :Numega中的...

    Android-Base-Google-Architectures:从Google Architectures,我正在做基础项目

    使用LiveData,ViewModel,LifecycleObserver和LifecycleOwner进行有效的配置更改,避免内存泄漏,并轻松将数据加载到UI中。 会议室:SQLite对象映射库 避免使用样板代码,并使用Room轻松将SQLite表数据转换为Java...

    Visual C++ 编程资源大全(英文源码 其它)

    05.zip Finding memory leaks 发现内存的泄漏(6KB)<END><br>6,06.zip Convert message ID to a string 将消息标志符转换成字符串(4KB)<END><br>7,07.zip Message Tracer 消息跟踪(5KB)<END><br>8,...

Global site tag (gtag.js) - Google Analytics