举几个可能发生内存泄漏的情况?

  1. 静态集合类引起的内存泄漏;

  2. 当集合里面的对象属性被修改后,再调用 remove() 方法时不起作用;

  3. 监听器:释放对象的时候没有删除监听器;

  4. 各种连接:比如数据库连接(dataSourse.getConnection()),网络连接(socket) 和 IO 连接,除非其显式的调用了其 close() 方法将其连接关闭,否则是不会自动被 GC 回收的;

  5. 内部类:内部类的引用是比较容易遗忘的一种,而且一旦没释放可能导致一系列的后继类对象没有释放;

  6. 单例模式:单例对象在初始化后将在 JVM 的整个生命周期中存在(以静态变量的方式),如果单例对象持有外部的引用,那么这个对象将不能被 JVM 正常回收,导致内存泄漏。

发表评论