Java内存泄漏常见代码

Java内存泄漏的根本原因是:长生命周期的对象持有短生命周期对象的引用

① 静态集合类引起内存泄漏

像hashmap,vector等静态变量生命周期和应用程序一致,他们所引用的所有对象obj也不能被释放,因为一致被引用着。最简单的办法就是vector=null

② 监听器

往往释放对象时候,忘记删除监听器

③ 各种连接

比如数据库连接、网络连接、IO连接,除非显式调用close()否则不会被gc回收。对于resultSet和statement对象可以不显式回收,但是connection一定要显式回收,因为connection在任何时候都不会自动回收,而一旦connection回收,resultSet和statement对象也会被置为null。如果使用连接池,处了要显式关闭connection,还要显式关闭resultSet Statement对象(关闭其中一个,另一个也会自动关闭),否则就会造成大量statement对象无法释放,一般在finally释放连接

④ 内部类和外部模块的引用

程序A调用B内部类的方法,传一个对象进去,很可能B就保持了这个对象的引用

⑤ 单例模式

单例对象在初始化后将在JVM整个生命周期中存在(静态变量的形式)如果单例对象持有外部对象的引用,那么这个对象也不能被回收。


Java内存泄漏常见代码


分享到:


相關文章: