`

java 容易引起内存泄漏的几大原因

    博客分类:
  • java
阅读更多
容易引起内存泄漏的几大原因

1 静态集合类
     像HashMap、Vector 等静态集合类的使用最容易引起内存泄漏,因为这些静态变量的生命周期与应用程序一致,如示例1,如果该Vector 是静态的,那么它将一直存在,而其中所有的Object对象也不能被释放,因为它们也将一直被该Vector 引用着。

2 监听器
     在java 编程中,我们都需要和监听器打交道,通常一个应用当中会用到很多监听器,我们会调用一个控件的诸如addXXXListener()等方法来增加监听器,但往往在释放对象的时候却没有记住去删除这些监听器,从而增加了内存泄漏的机会。

3 物理连接
         一些物理连接,比如数据库连接和网络连接,除非其显式的关闭了连接,否则是不会自动被GC 回收的。Java 数据库连接一般用DataSource.getConnection()来创建,当不再使用时必须用Close()方法来释放,因为这些连接是独立于JVM的。对于Resultset 和Statement 对象可以不进行显式回收,但Connection 一定要显式回收,因为Connection 在任何时候都无法自动回收,而Connection一旦回收,Resultset 和Statement 对象就会立即为NULL。但是如果使用连接池,情况就不一样了,除了要显式地关闭连接,还必须显式地关闭Resultset Statement 对象(关闭其中一个,另外一个也会关闭),否则就会造成大量的Statement 对象无法释放,从而引起内存泄漏。


4 内部类和外部模块等的引用
        内部类的引用是比较容易遗忘的一种,而且一旦没释放可能导致一系列的后继类对象没有释放。对于程序员而言,自己的程序很清楚,如果发现内存泄漏,自己对这些对象的引用可以很快定位并解决,但是现在的应用软件并非一个人实现,模块化的思想在现代软件中非常明显,所以程序员要小心外部模块不经意的引用,例如程序员A 负责A 模块,调用了B 模块的一个方法如:

public void registerMsg(Object b);
这种调用就要非常小心了,传入了一个对象,很可能模块B就保持了对该对象的引用,这时候就需要注意模块B 是否提供相应的操作去除引用。
分享到:
评论

相关推荐

    详细介绍Java的内存管理与内存泄露

    详细介绍Java的内存管理与内存泄露 作为Internet最流行的编程语言之一,Java现正非常流行。我们的网络应用程序就主要采用Java语言开发,大体上分为...本文先介绍Java的内存管理,以及导致Java内存泄露的原因。 ........

    关于JAVA内存泄漏问题注意事项

    关于JAVA内存泄漏问题注意事项.doc

    Java加载dll,导致Java进程内存泄露

    NULL 博文链接:https://cyj86.iteye.com/blog/1095213

    java内存泄露深度分析及解决

    尽管java虚拟机和垃圾回收机制管理着大部分的内存事务,但是在java软件中还是可能存在内存泄漏的情况。的确,在大型工程中,内存泄漏是一个普遍问题。避免内存泄漏的第一步,就是要了解他们发生的原因。这篇文章就是...

    java 内存泄露分析流程

    java 内存泄露分析方法、在工作中经常会碰到各种原因导致的内存泄露问题,本方法或许可以帮你快速定位内存泄露的原因从而解决问题

    JAVA内存溢出问题总结

    JAVA内存溢出问题总结

    内存泄漏与内存溢出

    软件开发 数据库 内存泄露 内存溢出

    详解Java内存泄露的示例代码

    通过一个Demo来简要介绍下ThreadLocal和ClassLoader导致内存泄露最终OutOfMemory的场景。下面通过示例代码给大家分享Java内存泄露的相关知识,感兴趣的朋友一起看看吧

    java内存泄漏

    这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记释放内存,从而导致内存的泄露。Java语言对内存管理做了自己的优化,这就是垃圾回收机制。Java的几乎所有内存对象都是在堆内存上分配(基本数据类型...

    Java内存泄漏问题相关总结

    本文档通过简单的一些示例,分析了容易引起内存泄露的几大原因,并提出了解决的办法!

    Tomcat内存泄露问题排查

    借助第三方工具进行内存分析,找出导致内存泄露的具体代码段。 MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的Java heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。...

    一种预防XML文件过大引起JAVA内存泄露的方案.pdf

    java内存泄露是对应用系统的稳定性有很大的影响,文件过大使程序运行要用到的内存大于虚拟机能提供的最大内存而导致内存泄露.文中提出了通过对XML文件拆分与拼装来解决由于XML文件过大而导致的内存泄露问题的方法....

    图片过大引起的内存溢出解决方案

    使用BitmapFactory加载图片时,如果图片过大可能引起OutOfmemory溢出的问题。解决办法。

    内存泄漏处理.doc

    曾经使用JAVA开发大型系统的网友恐怕都有过这种体会:系统运行一段时间后就抛出out of memory 异常,然后是...通过这种方法解决内存泄漏问题往往需要耗费大量的人力,而且并不能保证能够找到所有导致内存泄漏的代码。

    04、导致JVM内存泄露的ThreadLocal详解-ev

    04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、...

    Java 程序里的内存泄漏

    译序:Java 的内存泄漏,这不是一个新话题。...在这篇文章里,你会了解到是什么原因导致了 Java 内存泄漏以及什么时候需要对这些泄漏进行关注。你也将会学到一个快速实用的课程以应对自己项目中的内存

    JAVA 为什么不会内存泄漏

    内存泄漏  也称作“存储渗漏”  用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。即所谓内存泄漏。  内存泄漏概念  简单的说就是申请了一块内存空间,使用...

Global site tag (gtag.js) - Google Analytics